学习目标
学习什么是初始化列表,如何使用以及类对象作为类成员的调用顺序,还有静态成员,这些都是学习类时的重要知识,熟能生巧才是关键·
学习内容
初始化列表
1、采用初始化列表是为了对const类型成员进行初始化,一般也会使用初始化列表
2、对于引用类型的成员,也必须使用初始化列表
类对象作为类成员注意事项:
1、构造函数调用顺序:先调用其他类的成员,再调用本类成员(调用其他类的顺序由本类中声明顺序决定)
2、析构函数调用顺序:与构造函数调用顺序相反
静态成员
- 类的成员变量和成员方法都可以用静态static进行修饰,即已经确定好存储的内存区 注意事项:
- 静态成员在类内共享,不属于任何对象,属于类
- 静态成员变量必须在类内声明,类外定义
- 静态成员方法可以类内声明+定义
- 静态成员变量可以通过类或者对象名来获取
- 静态成员方法不允许对普通成员变量初始化,只允许对静态成员变量初始化
学习代码
💖初始化列表
#include <iostream>
using namespace std;
//初始化列表
/*
* 1、初始化列表常用来对const进行初始化,一般也会采用初始化列表
* 2、对于引用类型的成员,也要采用初始化列表进行初始化
*/
class MyClass
{
public:
int m_A;
const int m_B;
int& num;
MyClass() :m_A(10),m_B(20),num(m_A) {//初始化列表的方式
}
MyClass(int a, int b) :m_A(a), m_B(b),num(m_A) {//对const成员和引用成员进行初始化示例
}
};
int main() {
MyClass mc1(10,20);
cout << mc1.m_A << endl;
cout << mc1.m_B << endl;
cout << mc1.num << endl;
return 0;
}
💖类对象作为类成员
#include<iostream>
#include<string>
using namespace std;
/*
类对象作为类成员注意事项:
1、构造函数调用顺序:先调用其他类的成员,再调用本类成员(调用其他类的顺序由本类中声明顺序决定)
2、析构函数调用顺序:与构造函数调用顺序相反
*/
class Phone {
public:
string m_Pname;
Phone() {
cout << "Phone的无参构造函数" << endl;
}
Phone(string pname) {
cout << "Phone的有参构造函数" << endl;
}
~Phone() {
cout << "Phone的析构函数" << endl;
}
};
class Game {
public:
string m_Gname;
Game() {
cout << "Game的无参构造函数" << endl;
}
Game(string Gname) {
cout << "Game的有参构造函数" << endl;
}
~Game() {
cout << "Game的析构函数" << endl;
}
};
class Person
{
public:
string m_Name;
Phone m_Phone;
Game m_Game;
Person(string name, string Pname, string Gname) :m_Name("zijia"), m_Phone("honor"), m_Game("wzry") {
cout << "Person的有参构造函数" << endl;
}
~Person() {
cout << "Person的析构函数" << endl;
}
};
int main() {
Person p1("nihao","ww","sda");
return 0;
}
💖静态成员
#include<iostream>
using namespace std;
/*
* 类的成员变量和成员方法都可以用静态static进行修饰,即确定好存储的内存区
* 静态成员在类内共享,不属于任何对象,属于类
* 必须在类内声明,类外定义
* 静态成员变量可以通过类或者对象名来获取
*
* 静态成员方法不允许对普通成员变量初始化,只允许对静态成员变量初始化
*/
class Person {
public:
int m_A;
static int m_B;//声明一个静态成员变量,类内声明,类外定义;
static void func() {
//m_A = 10;不行
m_B = 20;
cout << "静态成员方法被调用了" << endl;
}
void func1() {//普通成员方法则均可以使用
m_A = 1;
m_B = 2;
cout << "普通成员方法被调用了" << endl;
}
};
int Person::m_B = 10;//类外定义静态成员变量
int main() {
Person p1;
cout << "m_B=" << p1.m_B << endl;//对象名获取
Person p2;
cout << "m_B=" << p2.m_B << endl;
cout << "m_B=" << Person::m_B << endl;//类名获取
p2.m_B = 1000;//静态成员变量共享
cout << "m_B=" << p1.m_B << endl;//对象名获取
cout << "m_B=" << p2.m_B << endl;
cout << "m_B=" << Person::m_B << endl;//类名获取
Person::func();
p2.func();
return 0;
}
代码实现
🎈初始化列表
🎈类对象作为类成员
🎈静态成员