写点什么

[C++ 总结记录] 构造函数初始化注意点

用户头像
图解AI
关注
发布于: 2021 年 03 月 24 日
[C++总结记录]构造函数初始化注意点

1.在构造函数中对属性一一赋值


class Cat{public: int age; string name; //对属性一一赋值 Cat(int age,string name){     this->name = name;     this->age = age; }}
复制代码


2.在构造函数采用初始化列表方式对属性进行赋值

a. 初始化列表方式初始化属性,函数体可以为空

class Cat {private:	string name;	int age;public:	Cat(string name,int age):name(name),age(age){}	void printInfo() {		cout << "name=" << this->name << endl;		cout << "age=" << this->age << endl;	}	};int main() {	Cat c1("黑猫", 23);	c1.printInfo();	return 0;}
复制代码


b. 初始化列表方式初始化部分属性,函数体可以不为空

class Cat {private:	string name;	int age;public:	Cat(string name,int age):name(name){ // 部分初始化列表		this->age = 100000; //采用普通的一一赋值	}	void printInfo() {		cout << "name=" << this->name << endl;		cout << "age=" << this->age << endl;	}	};
复制代码

C:成员变量的初始化顺序与初始化列表中列出的变量的顺序无关,它只与成员变量在类中声明的顺序有关。

#include <iostream>using namespace std;class Demo{private:    int m_a;    int m_b;public:    Demo(int b);    void show();};Demo::Demo(int b): m_b(b), m_a(m_b){ }void Demo::show(){ cout<<m_a<<", "<<m_b<<endl; }int main(){    Demo obj(100);    obj.show();    return 0;}	
复制代码


3. 如类中有 const 成员变量,属性的初始化必须用初始化列表进行初始化


class Cat {private:	const string name;	const int age;	const int weight;public:	Cat(string name, int a) :name(name), weight(a) ,age(a){ // 部分初始化列表	}	void printInfo() {		cout << "name=" << this->name << endl;		cout << "age=" << this->age << endl;		cout << "weight=" << this->weight << endl;	}
};
复制代码


用户头像

图解AI

关注

技术成就未来 2021.03.22 加入

致力于:机器学习、深度学习、数据分析、算法、架构、C/C++、Rust、HTML5/webApp、Go、Python、Lua...

评论

发布
暂无评论
[C++总结记录]构造函数初始化注意点