目录
const修饰的成员变量和成员方法
一、修饰成员变量称为常成员变量
常成员变量一定要初始化,在构造函数的初始化列表中初始化;
二、修饰成员方法称为常方法
在这里const修饰的是this指针
注意:
常对象不能调用普通方法,只能调用常方法;
普通对象既可以调用普通方法,对可调用常方法;
普通方法可以调用常方法;
常方法不能调用普通方法;
例子如下:
class A
{
public:
A(int a,int b):ma(a)
{
mb = b;
}
void getMa()
{
cout<<ma<<endl;
}
void show() const
{
getMa();//错误:常方法不能调用普通方法
cout<<mb<<endl;
}
void Print()
{
show();//正确:普通方法可以调用常方法
cout<<mb<<endl;
}
private:
int ma;
int mb;
};
int main()
{
A a(10,20);
//正确:普通对象既可以调用普通方法,对可调用常方法;
a.Print();
a.show();
const A aa(30, 40);
aa.getMa(); //错误:常对象不能调用普通方法;
aa.show();//正确:只能调用常方法;
return 0;
}
static关键字修饰c++类中的成员变量和成员方法
一、修饰成员变量
则该成员变量不属于对象独享,而是对象共享;
并且该成员变量一定要在类外进行初始化;
该成员变量不依赖于对象调用;
二、修饰成员方法
——cdcel的调用约定,无this指针存在;
不能访问普通成员变量,可以访问静态的成员变量以及全局变量;
不依赖对象调用;
静态成员方法不能调用普通成员方法;
普通成员方法可以调用静态成员方法;
例子如下:
int gdata = 10;
class Test
{
public:
static void show()
{
std::cout<<a<<std::endl;//正确:可以访问静态变量;
std::cout<<b<<std::endl;//错误;不能访问普通成员变量
std::cout<<gdata<<std::endl;//正确:可以访问全局变量;
Print();//错误;不能调用普通成员方法
}
void Print()
{
show();//正确:普通成员方法可以调用静态成员方法;
}
private:
static int a;//对象共享该成员变量
int b;
};
int Test::a = 10;//类外初始化
int main()
{
Test test1(10, 20);//错误
cout << sizeof(Test) << std::endl;
//不可访问私有成员变量
cout << test1.b << endl;
cout << test1.a << endl;
//不依赖对象调用静态成员方法
Test::show();
test1.show();
return 0;
}