一.成员变量和成员函数分开来存储
在C++中,类内的成员变量和成员函数分开存储
空对象占用内存空间为1,C++编译器会给每一个空对象也分配一个字节空间,是为了区分空对象占内存的位置,每个空对象也应该有一个独一无二的内存地址
只有非静态变量才属于类的对象上
静态成员变量,不属于类的对象
非静态成员函数,不属于类的对象
静态成员函数,不属于类的对象
二.this指针的概念
C++中成员变量是分开存储的,每一个非静态成员函数只会诞生一份函数实例,也就说多个同类型的对象会共用一块带代码,C++通过提供特殊的对象指针:this解决代码区分对象调用自己,this指针指向被调用的成员函数所属的对象
this指针是隐含在每一个非静态成员函数的一种指针,this指针不需要定义,直接使用即可
this指针的用途:
1当形参和成员变量同名时,可以用this指针加以区分
修改方法:修改形式参数或者成员变量名称;使用this指针指明变量(如下图)
2.在类的非静态成员函数中返回对象本身,可以使用return *this
#include <iostream>
#include<string>
using namespace std;
class person {
public:
person(int age)
{
this->age = age;
}
person& personaddage(person& p)
{
this->age += p.age;
//this指向p2的指针,而*this指向p2对象的本体
//如果要返回本体,要用引用的方式返回
return *this;
}
int age;
};
void test01()
{
person p1(10);
person p2(20);
//链式编程思想,无限向后叠加
p2.personaddage(p1).personaddage(p1).personaddage(p1);
cout << "person的年龄为" << p2.age << endl;
}
int main() {
test01();
system("pause");
return 0;
}
注意,如果将personaddage的返回改成值而不是引用,则会执行拷贝构造函数功能,复制一份新的p2,后面同理,因此p2只能在第一次被改变,其余就是改变新增的p2值
class person {
public:
person(int age) {
this->age = age;
}
person personaddage(person& p) {
person newPerson(this->age + p.age);//创建了一个新的 person 对象 newPerson,并将其年龄设置为当前对象的年龄加上参数对象的年龄之和
return newPerson;
}
int age;
};