初始化列表
语法:构造函数(): 属性1(值),属性2(值)...
构造函数(数据类型 变量1,数据类型 变量2): 属性1(变量1),属性2(变量2)...
构造函数:
Person(int a, int b): m_name(a), m_age(b){
}
类对象作为类成员
先构建phone再构建person函数
#include <iostream>
using namespace std;
#include <string>
class Phone
{
public:
Phone(string pName)
{
m_PName = pName;
cout << "Phone构造函数调用" << endl;
}
string m_PName;
};
class Person
{
public:
Person(string name, string pName) : m_Name(name), m_Phone(pName)
{
cout << "Person构造函数调用" << endl;
}
string m_Name;
Phone m_Phone;
};
int main()
{
Person p("张三", "苹果");
cout << "姓名:" << p.m_Name << "手机:" << p.m_Phone.m_PName << endl;
return 0;
};
输出:
Phone构造函数调用
Person构造函数调用
姓名:张三手机:苹果
静态成员
静态成员就是在成员函数和成员变量前加上static
静态成员变量:
- 所有对象共享同一份数据
- 在编译阶段分配内存
- 类内声明,类外初始化(必须在类外初始化)
静态成员函数:
- 所有对象共享同一个函数
- 静态成员函数只能访问静态成员变量
#include <iostream>
using namespace std;
#include <string>
class Person
{
public:
Person()
{
cout << "Person构造函数调用" << endl;
}
static int age;
};
int Person::age = 100;
int main()
{
Person p;
Person p1;
cout << p.age << endl;
cout << p1.age << endl;
p1.age=20;
cout << p.age << endl;
cout << p1.age << endl;
cout << Person::age << endl;//可以通过类名访问
return 0;
};
非静态成员变量占对象空间/静态成员变量不占/函数也不占,所有函数共享一个函数实例