标签:this 指针 赋值 包含 沟通 clu ret ref 成员变量 alt
目录
1、Static意为静态成员,若Static修饰的成员位于C++类中,那么Static就实现了同一个类,多个对象共享数据,协调行为的目的。
2、静态变量具有全局变量的优势,又不会像全变量一样被滥用。C++中用于管理静态变量,就需要用到静态函数。
3、C++中类的静态成员,属于类,也属于对象,但终归属于类。(比较绕,直接记做属于类)
//示例
#include <iostream>
using namespace std;
class A
{
public:
static int share; //Static变量的声明
};
int A::share = 5; //Static变量的初始化
int main()
{
A x;
cout<<A::share<<endl; //方法一:Static变量的调用
cout<<x.share<<<<endl; //方法二:Static变量的调用
return 0;
}
1、 共享 : static 成员变量实现了同族类对象间信息共享;
2、 初始化:static 成员使用时必须初始化,且只能类外初始化。声明与实现分离时;只能初始化在实现部分(cpp 部分);
3 、类大小: static 成员类外存储,求类大小,并不包含在内;
4、 存储 : static 成员是命名空间属于类的全局变量,存储在 data 区 rw 段;
5、 访问 :可以通过类名访问(无对象生成时亦可),也可以通过对象访问。备注:static静态成员可以被类内的普通函数静态函数都可访问。
//示例
#include <iostream>
using namespace std;
class A
{
public:
int a;
static void foo()
{
// a = 1; 错误 只能访问静态成员
share++;
}
static int share;
};
int A::share = 0;
int main()
{
A a;
a.foo();
A::foo();
return 0;
}
1、 静态成员函数的意义,不在于信息共享,数据沟通,而在于管理静态数据成员, 完成对静态数据成员的封装。
2、 staitc 修饰成员函数,仅出现在声明处,不可在定义处。
方式一、class A
{
static void fun()
{
}
}
方式二、
class A
{
static void fun();
}
void A:: fun() //staitc 修饰成员函数不能出现在定义处
{
}
3、 静态成员函数只能访问静态数据成员。原因:非静态成员函数在调用时 this指针被当作参数传进。而静态成员函数是属于类,不属于对象,没有 this 指针。
1、 const 修饰数据成员,称为常数据成员。常数据成员可被普通成员函数和常成员函数来使用,不可以更改。
2、const 常数据成员在使用前必须被初始化。也就是定义的同时就要初始化,之后不能再去赋值,只能使用。可以在类中(不推荐),或初始化参数列表中(这是在类对象生成之前唯一一次改变 const 成员的值的机会了)。
Const单变量初始化
const int a = 1;
Const变量在类中初始化
错误示范!!!!!
#include <iostream>
using namespace std;
class A
public:
void dis()
{
cout<<data<<endl;
}
private:
const int data;
};
当用该类去定义对象时就会显示出错,,提示没有初始化const成员data,且提示data为只读。
错误示范!!!!!
#include <iostream>
using namespace std;
class A
public:
void A()
{
data = 100; //错误的写法
}
private:
const int data;
};
const成员位于类中成员时会成为只读属性(只读:不能出现在“=”的左边)。所以也不可以直接在类的构造函数中去初始化const成员。
//当然你也可以把const定义为局部变量,语法OK,但一般一旦定义const都是作为全局的。局部的就和普通局部变量一样了,没有多大意义。
#include <iostream>
using namespace std;
class A
public:
void A()
{
const int data = 100; //正确
}
};
const正确初始化方法 --- <采用初始化列表进行初始化>
1、初始化列表先与本对象的构造函数执行
2、初始化列表与成员的声明顺序相同的。
//方法一:
#include <iostream>
using namespace std;
class A
public:
void A(int i)data(i)
{
cout<<data<<endl;
}
private:
const int data;
};
int main()
{
A a(200);
return 0;
}
//方法二:
#include <iostream>
using namespace std;
class A
public:
void dis()
{
cout<<data<<endl;
}
private:
const int data = 100;
};
int main()
{
A a;
return 0;
}
> 第三种情况:
//方法二:
#include <iostream>
using namespace std;
class A
public:
void A(int i)data(i)
{
cout<<data<<endl;
}
void dis()
{
cout<<data<<endl;
}
private:
const int data = 100;
};
int main()
{
A a(200);
return 0;
}
//输出结果: 200
//那么可以得出: 最终Const变量的初始化值为确定的初始化参数列表里面的值!!
1、const 修饰函数放在声明之后,实现体之前。
2、const 修饰函数不能修改类内的数据成员变量。
3、const 修饰函数只能调用 const 函数。非 const 函数可以调用 const 函数。
4、const 修饰的全局函数在定义和声明处都需要 const 修饰符。
1、const 对象,只能调用const成员函数。
标签:this 指针 赋值 包含 沟通 clu ret ref 成员变量 alt
原文地址:https://www.cnblogs.com/retry/p/9509403.html