成员变量和成员函数
成员变量和成员函数分开存储
只有非静态的成员变量才时类的对象
静态成员变量、静态成员函数、非静态成员函数在内存中只有一份
空对象所占内存空间为:1字节(主要为了区分不同空对象)
this指针
this 指针隐含在每一个非静态成员函数内的一种指针常量,并且指向被调用的成员函数所属的对象,可直接使用。
作用:
- 解决名称冲突
class Person{
private:
int age;
public:
Person(int age){
this->age=age;//this->age是类的成员变量,age是函数传进来的形参
}
}
- 返回对象本身用*this
Person& addAge(int ans){
age+=ans;
return *this;
}
.
.
.
Person p1(12);
//链式编程思想
p1.addAge(2).addAge(3).addAge(4);
空指针访问成员函数
利用类的空指针访问成员函数,不能访问含有this的成员函数。
class Person{
private:
int age;
public:
void test0(){
cout<<"hello,world"<<endl;
}
void test1(){
cout<<age<<endl;
}
};
.
.
.
Person* p=NULL;
p->test0();//正确
p->test1();//错误操作,test1()中age相当于this->age,此时this指针为空
为了提高代码的健壮性,将上述类中的test1函数改为:
void test1(){
if(this==NULL){
return;
}
cout<<age<<endl;
}
.
.
Person *p=NULL;
p->test1();//正确
常函数和常对象
常函数
语法:
返回值类型 函数名 (参数列表)const {
函数体
}
特点:
- 常函数不可以修改成员属性
- 加关键字mutable的成员属性,常函数内可以修改
class Person{
public:
int age;
mutable int key;
void test() const{
//这里的age相当于this->age,this指针相当于Person *const this;
//在函数后加const相当于const Person *const this,此时this的指向的值也不能修改
age=23;//错误操作
key=1;//正确
}
}
注意问题:
在定义类的只读成员函数时,最好定义为常函数
常对象
语法: const 类名 对象名;
特点:
1.常对象只能调用常函数
2.在public权限下,常对象不能更改普通成员变量,加mutable才能修改。
class Person{
public:
int age;
mutable int key;
void test() const{
key=1;//正确
}
void test2(){
}
}
.
.
.
const Person p1;
p1.age=20;//错误操作
p1.key=2;//正确
p1.test2();//错误操作
p1.test();//正确
C++类的成员、指针及常函数对象解析
本文围绕C++类展开,介绍成员变量和成员函数分开存储,非静态成员变量才属于类对象。阐述this指针隐含在非静态成员函数内,可解决名称冲突等。还提及空指针访问成员函数的限制,以及常函数和常对象的语法、特点与注意事项。

被折叠的 条评论
为什么被折叠?



