Table of contents
4.3.2 Class objects as class members
4.3.3.1 Static member variables
4.3.3.2 Static member functions
4.3.1 Initialization List
C++ provides initialization list syntax to initialize properties
Syntax: constructor():property1(value1),property2(value2)...{}
Give him an initial value when instantiating an object.
#include<iostream>
#include<algorithm>
using namespace std;
class MyClass
{
public:
//初始化列表初始化属性
MyClass(int a,int b,string c):class_number(a),class_tele(b),class_name(c)
{
}
~MyClass();
int class_number;
int class_tele;
string class_name;
private:
};
void test01() {
MyClass p(10,20,"hzh");
}
int main()
{
test01();
return 0;
}
4.3.2 Class objects as class members
class A{};
class B{
A a;
}
// 实例化对象B的时候系统实际上会先实例化A,析构函数的执行则相反
4.3.3 Static members
Static member is to add keyword static before member variable and member function, called static member
Static members are divided into:
4.3.3.1 Static member variables
- All objects share the same data.
- Allocate memory at compile time.
- In-class declaration, out-of-class initialization ·
#include<iostream>
#include<algorithm>
using namespace std;
class MyClass
{
public:
/*静态成员变量的特点
1.所有对象共享同一份数据。
2.在编译阶段分配内存。
3.
*/
static int class_number;
int class_tele;
string class_name;
private:
};
//类内声明,类外初始化
int MyClass::class_number = 100;
void test01() {
//静态成员变量的两种访问方式
//1.通过对象
MyClass p1;
cout << p1.class_number << endl;
MyClass p2;
p2.class_number = 200;
cout << p1.class_number << endl;
//2.通过类名(建议:因为静态成员变量实际上并不属于某一个类)
cout << MyClass::class_number << endl;
}
int main()
{
test01();
return 0;
}
4.3.3.2 Static member functions
- All objects share the same function
- Static member functions can only access static member variables
#include<iostream>
#include<algorithm>
using namespace std;
class MyClass
{
public:
/*静态成员函数的特点
1.所有对象共享同一个函数
2.静态成员函数只能访问静态成员变量
3.静态成员函数也是有访问权限
*/
static void fun() {
class_number = 100;
cout << "静态成员函数的调用" << endl;
}
static int class_number;
int class_tele;
string class_name;
private:
};
int MyClass::class_number = 0;
void test01() {
//静态成员函数的两种访问方式
//1.通过对象
MyClass p1;
p1.fun();
//2.通过类名
MyClass::fun();
}
int main()
{
test01();
return 0;
}