一、成员变量和成员函数分开存储
只有非静态成员变量才属于类的对象上
①C++编译器会给每一个空对象分配一个字节的空间,为了区分空对象占内存的位置
class Person
{
}
void test()
{
Person P;
//空类(类中什么也没有)中的空对象所占内存空间为 1
cout << sizeof(P) << endl;
}
②非空类所占内存空间
class Person
{
int m_A; //非静态成员变量 属于类对象上的数据
static int m_B;//静态成员变量 不属于类对象
void func(){}//非静态成员函数 不属于类对象
static void func2(){}//静态成员函数 不属于类对象
};
int Person::m_B = 0;
void test()
{
Person P;
//所占内存为4
cout << sizeof(P) << endl;
}
二、this指针概念
this指针指向被调用的成员函数所属对象
用途:①当形参和成员变量同名时,可用this指针区分
②在类的非静态成员函数中返回对象本身,可使用return *this
class Person
{
public:
Person(int age)
{
//this指针指向被调用成员函数 所属对象
this->age = age;
}
//如果用Person&一直返回一个对象;如果用Person就会复制新对象
Person& add(Person &p)
{
this->age += p.age;
//this指向p2指针,而*this指向p2这个对象的本体
return *this;
}
int age;
};
//解决名称冲突
void test()
{
Person p1(18);
cout << "p1年龄:" << p1.age << endl;
}
//返回对象本身用*this
void test2()
{
Person p1(10);
Person p2(10);
//链式编程思想
p2.add(p1).add(p1).add(p1).add(p1);
cout << "p2年龄:" << p2.age << endl;
return ;
}
三、空指针访问成员函数
class Person
{
public:
void showClassName()
{
cout << "This is Person class" << endl;
}
//处理后提高代码健壮性
void showPersonAge()
{
if(this == NULL)
{
return;
}
cout << "age =" << this->m_Age << endl;
}
int m_Age;
};
void test()
{
Person * p = NULL; //创建空指针
P->showClassName(); //可以直接调用
p->showPersonAge();
//因为该函数的属性是当前对象的属性,如果用空指针(没有对象)就没办法访问里面的属性
}
四、const修饰成员函数
常函数:
1、成员函数后加const后称该函数为常函数
2、常函数内不可以修改成员顺序ing
3、成员属性声明时加关键字mutable后,在常函数中依然可以修改
class Person
{
public:
//this指针的本质是指针常量 指针指向不可以修改
//在成员函数后加const,修饰的是this指向,让指针指向的值也不可以修改
//常函数:
void showPerson() const //相当于 const Person * const this
{
//函数后面加了const后变量不可修改
//this->m_A = 100; 该行报错
this->m_B = 100;
}
int m_A;
mutable int m_B; //特殊变量,在常函数中也可以修改该值
};
常对象:
1、声明对象前加const称该对象为常对象
2、常对象只能调用常函数
class Person
{
public:
void showPerson() const
{
m_B = 100;
}
void func()
{
m_A = 100;
}
int m_A;
mutable int m_B; //特殊变量,在常函数中也可以修改该值
};
void test()
{
//常对象:
const Person p;
p.m_A = 100;//不可以修改
p.m_B = 100;//m_B是特殊值,在常对象下可以修改
//常对象只能调用常函数
p.showPerson();//可以运行
p.func();//报错 不能运行
}
标签:const,函数,对象,模型,C++,Person,void,指针
From: https://blog.csdn.net/weixin_60546365/article/details/140799009