内容纲要
代码如图:
Tip: 在类中 调用另外的类的初始化需要使用 “ 初始化列表 ” ,不知道为何使用传统显式/隐式定义会报错。。
#include <iostream>
#include "string"
using namespace std;
class Phone {
public:
Phone(string pName) {
cout << "Phone构造函数被调用" << endl;
m_PName = pName;
}
~Phone() {
cout << " Phone析构函数被调用 喵~~" << endl;
}
string m_PName;
};
class Person {
public:
Person(string m_Name ,string pName) :name(m_Name),phone(pName)
{
cout << "Person构造函数被调用" << endl;
cout << name << " 买了一部 " << phone.m_PName << " 手机" << endl;
}
~Person() {
cout << " Person析构函数被调用 喵~~" << endl;
}
//Person(string m_Name, string pName){ //这里会报错
// name = m_Name;
// //phone = Phone(pName);
// phone = Phone(pName);
//}
string name;
Phone phone ;
};
void main() {
Person("张三", "苹果");
}
构造顺序:
当其它类对象作为本类成员,构造时 先 构造类对象,再构造自身,
析构的顺序与构造相反!!!!!
静态成员
静态成员就是在成员变量和成员函数前加上关键字 static,称为静态成员
静态成员分为:
-
静态成员变量:
- 所有对象共享一份数据
- 在编译阶段分配内存
- 类内声明,类外初始化
-
静态成员函数
- 所有对象共享一个函数
- 静态成员函数只能访问静态成员变量
静态成员也是有访问权限的,但是依旧要遵循类内声明,类外初始化。
静态成员变量
#include <iostream>
using namespace std;
//静态成员变量
class Person {
public:
//1. 所有对象都共享同一份数据。
//2. 编译阶段就分配内存
//3. 类内声明,类外初始化。
//
static int m_A;
//静态成员变量也是有访问权限的。
private:
static int m_B;
};
int Person::m_A = 100;
int Person::m_B = 200;
void test01(){
Person p;
//静态成员变量 不属于某一个对象上,所有对象都共享同一份数据。
//因此静态成员变量有两种访问方式
//1. 通过对象进行访问
cout << p.m_A << endl;
//2. 通过类名进行访问。
cout << Person::m_A << endl;
//访问私有的静态成员变量?
//cout << Person::m_B << endl;//报错。访问权限受限
}
void main(){
test01();
}
静态成员函数
- 所有对象共享一个函数。
- 静态成员函数只能访问静态成员变量。