目录
4.2.7 类对象作为类成员
C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员。
例如:
class A {}
class B
{
A a;
}
B类中有对象A作为成员,A为对象成员。
那么当创建B对象时,A与B的构造和析构的顺序是谁先谁后?
示例:
class Phone
{
public:
Phone(string name):m_Pname(name)
{
cout << "Phone 构造函数调用" << endl;
}
~Phone()
{
cout << "Phone 析构函数调用" << endl;
}
string m_Pname;
};
class Person
{
public:
Person(string name, string pname):m_Name(name),m_Phone(pname)
{
cout << "Person 构造函数调用" << endl;
}
~Person()
{
cout << "Person 析构函数调用" << endl;
}
string m_Name;
Phone m_Phone;
};
void test01 ()
{
Person p1("小明","xx");
cout << p1.m_Name << " : " << p1.m_Phone.m_Pname << endl;
}
int main() {
test01();
system("pause");
return 0;
}
-----------------------------------------------------------------------
Phone 构造函数调用
Person 构造函数调用
小明 : xx
Person 析构函数调用
Phone 析构函数调用
请按任意键继续. . .
4.2.8 静态成员
静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。
静态成员分为:
- 静态成员变量:
所有对象共享同一份数据( p1.m_A 和 p2.m_A 是一样的)
在编译阶段分配内存
类内声明,类外初始化
- 静态成员函数
所有对象共享同一函数
静态成员函数只能访问静态成员变量
访问方式:
- 通过对象
- 通过类名
示例:
// 静态成员函数
// 所有对象共享同一函数
// 静态成员函数只能访问静态成员变量
class Person
{
public:
// 静态成员函数
static void func()
{
m_A = 10; // 静态成员函数只能访问静态成员变量
m_B = 20; // 这句编译器会报错,静态成员函数 不可以访问 非静态成员变量。无法区分到底是哪个对象的属性
cout << "static void func 调用" << endl;
}
static int m_A;
int m_B;
// 静态成员函数也是有访问权限的
private:
static void func2()
{
cout << "static void func2 调用" << endl;
}
};
void test01 ()
{
// 1.通过对象访问
Person p;
p.func();
// 2.通过类名访问
Person::func(); // 所有对象共享同一函数
p.func2(); // 类外访问不到私有静态成员函数
Person::func2();
}
int main() {
test01();
system("pause");
return 0;
}
相关教程
- 开发环境搭建:Visual Studio 2019 C++开发环境搭建
- 推荐视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&seid=4205594350351753444
- 已投币三连,非常细致的视频教程,感谢up主。