C++类的构造函数构造时的赋值顺序

文章目录

    • 前言
    • 距离
      • 分析

前言

C++中类如果继承自父类,且构造时手动调用父类构造;
赋值顺序如下:
1、父类构造函数赋值;
2、子类成员会按照声名顺序赋值。

距离

#include 

using namespace std;

class Base{
	protected:
		int m_a;
	public:
		Base(int a):m_a(a){
			cout << "m_a = "<<a<<endl;
		}
};

class Derived:public Base{
	int m_b;
	int m_c;
	public:
		Derived(int a,int c):m_c(c),Base(a),m_b(m_a + m_c){//父类先赋值,
		}
		void func(){
			cout << m_a <<" "<<m_b<<" "<<m_c<<endl;
		}
};


int main(){
	Derived a1(1,10);
	a1.func();
	return 0;	
}

分析

Derived类继承自父类Base,在声明一个Derived对象时,会首先进行父类Base的构造,即对m_a赋值为1;

其次会按照子类声名顺序赋值,此时会先赋值m_b,由于m_c未赋值,所以m_b时不确定的。
运行出来个能大多数都是1,但是这是因为此时m_c大概率在初始化时都是0,其实是不定义的。

之后再给m_c赋值为10;

你可能感兴趣的:(C++语法,c++,开发语言,算法)