一、初始化列表
作用:C++提供初始化列表语法,用来初始化属性
语法: 构造函数():属性1(值1), 属性2(值2), …{ }
class Person {
public:
//传统的初始化操作
Person(int a, int b, int c) {
m_A = a;
m_B = b;
m_C = c;
}
//初始化列表初始化属性
Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {
}
int m_A;
int m_B;
int m_C;
};
void test01() {
Person p(10, 20, 30);
cout << p.m_A << endl;
cout << p.m_B << endl;
cout << p.m_C << endl;
}
二、类对象作为类成员
C++类中的成员可以是另一个类的对象,我们称该成员为对象成员
class A {}
class B{
A a;
}
B类中有对象A作为成员,A为对象成员
那么创建B对象时,A与B的构造与析构的顺序是谁先谁后?
//手机 类
class Phone {
public:
Phone(string pName) {
m_PName = pName;
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 p("张三", "苹果");
}
结果是:
Phone的构造函数调用
person的构造函数调用
person的析构函数调用
Phone的析构函数调用
结论: 当其他类对象作为本类对象,构造时候先构造类对象,再构造自身,析构的顺序与构造相反
静态成员
静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员
- 静态成员变量
1、所有对象共享同一份数据
2、在编译阶段分配内存
3、类内声明,类外初始化 - 静态成员函数
1、所有对象共享同一个函数
2、静态成员函数只能访问静态成员变量
静态成员变量:
//静态成员变量
class Person {
public:
//1、所有对象都共享同一份数据
//2、编译阶段就分配内存
//3、类内声明,类外初始化操作
static int m_A;
};
int Person::m_A = 100;//类外初始化操作
void test01() {
Person p;
cout << p.m_A << endl; //输出100
Person p2;
p.m_A = 200;
cout << p2.m_A << endl; //输出200
}
//静态成员变量
class Person {
public:
//1、所有对象都共享同一份数据
//2、编译阶段就分配内存
//3、类内声明,类外初始化操作
static int m_A;
//静态成员变量也有访问权限
private:
static int m_B;
};
int Person::m_A = 100;//类外初始化操作
int Person::m_B;
void test02() {
//静态成员变量 不属于某个对象,所有对象都共享同一份数据
//两种访问:
//1、通过对象进行访问
Person p;
cout << p.m_A << endl;
//2、通过类名来访问
cout << Person::m_A << endl;
//cout << Person::m_B << endl;//私有权限访问不了
}
静态成员函数:
class Person {
public:
//静态成员函数
static void func() {
m_A = 100;//2、静态成员函数可以访问静态成员变量
//m_B = 200;//报错,因为,静态成员函数不可以访问非静态成员
cout << "static void func调用" << endl;
}
static int m_A;//静态成员变量
int m_B;//非静态成员变量
//静态成员函数也是有访问权限的
};
int Person::m_A = 0;
//静态成员函数的两种访问方式://所有对象共享同一个函数
void test01() {
//1、通过对象访问
Person p;
p.func();
//2、通过类名访问
Person::func();
}
标签:初始化,第十一次,成员,C++,Person,int,对象,静态
From: https://blog.csdn.net/LqianH6/article/details/140737655