4.3 Initialization operations and static members

Table of contents

4.3.1 Initialization List

4.3.2 Class objects as class members

4.3.3 Static 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;
}

Guess you like

Origin blog.csdn.net/qq_42573052/article/details/120853220