C++类和对象的学习【part3:对象特性2.0】
成员变量和成员函数分开存储
在C++中,类内的成员变量和成员函数分开存储。
只有非静态成员变量才属于类的对象上。
这里一共有四种成员:
- 非静态成员变量
- 静态成员变量
- 非静态成员函数
- 静态成员函数
具体展示代码如下:
// arrayone.cpp -- small arrays of integers
#include <iostream>
using namespace std;
#include <string>
class Person
{
public:
Person()
{
mA = 0;
}
//非静态成员变量占对象空间
int mA;
//静态成员变量不占对象空间
static int mB;
//函数也不占对象空间,所有函数共享一个函数实例
void func()
{
cout << "mA:" << this->mA << endl;
}
//静态成员函数也不占对象空间
static void sfunc()
{
}
};
int main()
{
cout << sizeof(Person) << endl;
system("pause");
return 0;
}
需要注意的是:
一个空的类,内存占用一个字节,目的是区分不同的空对象占用的内存位置。
如果含有非静态成员变量,则占用该成员变量字节数。
含有多个则累加。
this指针概念
this指针指向被调用的成员函数所属的对象
this指针是隐含每一个非静态成员函数内的一种指针
this指针不需要定义,直接使用即可
this指针的用途:
- 当形参和成员变量同名时,可用this指针来区分
- 在类的非静态成员函数中返回对象本身,可使用return *this
以下代码为返回对象本身的例子:
Person& PersonAddPerson(Person p)
{
this->age += p.age;
//返回对象本身
return *this;
}
这样,调用时可采用递归式调用:
p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1);
空指针访问成员函数
我们可以定义一个类的指针,但令其为空(暂时不是很理解这是干啥呢)。
这个空指针可以调用成员函数,但要注意有没有用到this指针。
程序主体如下:
//空指针访问成员函数
class Person {
public:
void ShowClassName() {
cout << "我是Person类!" << endl;
}
void ShowPerson() {
if (this ==