this指针的用途
1.this指向被调用成员函数所属的对象
class stu {
public:
int num;
stu(int num) {
this->num = num;//this指向被调用成员函数所属的对象
}
void get() {
cout << num << endl;
}
};
int main(){
stu s(100);
s.get();//100
}
2.返回对象本身用 *this
注意若要返回对象本身,返回对象的类型须为引用
因为若不是引用,构造器默认的拷贝构造函数,将会把该类拷贝一份,而并非该类本身
class stu {
public:
int num;
stu(int num) {
this->num = num;//this指向被调用成员函数所属的对象
}
stu& set(stu s) {
this->num += s.num;
return *this;//返回本身
}
};
int main(){
stu s(100);
s.set(s).set(s).set(s);
cout << s.num;
}
空指针访问成员函数
空指针也可以访问成员函数
class stu {
public:
int num=10;
void set() {
cout << "hellow CSDN"<< endl;
}
void get() {
cout << num << endl;//num想当是 this.num
}
};
int main(){
stu *s=NULL;
s->set();
}
但是如果调用 get()函数
int main(){
stu *s=NULL;
s->get();
}
会报错
为什么呢?
num其实是 this.num,问我们将它指向了空指针,所以读取时会异常
成员变量和成员函数分开储存
只有非静态成员变量才属于类的对象上
class Stu {
};
int main(){
Stu p;
cout << sizeof(p);//1
}
空对象占用内存为1,编译器会为每个空对象分配1个字节的空间
class Stu {
int p;//非静态成员变量
};
int main(){
Stu p;
cout << sizeof(p);//4
}
当只有非静态成员变量时占内存大小为 4;
class Stu {
int p;//非静态成员变量
static int f;//静态成员变量
void q() {};//静态成员函数
static void w() {}; //非静态成员函数
};
int main(){
Stu p;
cout << sizeof(p);//4
}
此时占内存大小仍为4,所以可得 只有非静态成员变量才属于类的对象上