初始换列表:
class Test1
{
public:
Test1(int a, int b) :ma(b), mb(a)
{
//等价 ma = b; mb = a;
}
void Show()
{
std::cout << "ma:" << ma << std::endl;
std::cout << "mb:" << mb << std::endl;
}
private:
int ma;
int mb;
};
int main()
{
Test test1(10, 20);
test1.Show();
Test1 test11(10, 20);
test11.Show();
return 0;
}
注意:初始化列表中执行顺序为成员变量的声明顺序有关,const成员和引用成员只能在初始化列表初始化
常对象的使用方法:
int main()
{
const Test test1(10, 20);
test1.Show(); //error; test1为const Test* 类型,而 this 指针为 Test* const类型;
//如果调用,则有修改成员的风险;
}
注意:常对象只能调用常方法,常方法不可以调用普通方法;普通成员方法可以调用常方法
常对象调用的this指针为const Test * this,而不普通方法调用的指针为 Test * this;( Test * != const Test *)
//常方法
void Show() const
{
std::cout << "ma:" << ma << std::endl;
std::cout << "mb:" << mb << std::endl;
}
void Show() const
{
std::cout << "ma:" << ma << std::endl;
std::cout << "mb:" << mb << std::endl;
Show1(ma);//erorr; 此时 this 为const Test * const 类型 ,而Show1普通方法的this 为 Test* const
}
void Show1(int ma)
{
std::cout << "ma:" << ma << std::endl;
std::cout << "mb:" << mb << std::endl;
}
静态对象的使用方法:
静态的成员变量:(初始化在类外,不属于对象私有,所有对象共享)
Test
{
public:
static int ma;
int mb;
};
int Test::ma = 10;
静态的成员方法:(调用约定为_cdecl约定,没有 this 指针,不能访问普通成员变量,只能访问静态的成员变量)
Test
{
public:
static void Print()
{
std::cout << "ma:" << ma << std::endl;
//std::cout << "mb:" << mb << std::endl; //erorr
}
static int ma;
int mb;
};
int Test::ma = 10;