读书人

承继来的成员变量的构造顺序是什么

发布时间: 2013-09-08 15:21:21 作者: rapoo

继承来的成员变量的构造顺序是什么?
比如有这样几个类


class IHaveA
{
protected:
A m_a;
};

class IHaveB
{
protected:
B m_b;
};

class IHaveC
{
protected:
C m_c;
};


然后我这样继承

class IHaveABC:
public IHaveA,
public IHaveB,
public IHaveC
{
};


那么m_a,m_b,m_c的构造顺序是什么
是根据public的顺序来决定的么?


[解决办法]
一般情况下是
按照声明的顺序依次执行父类的构造函数的

class IHaveABC:
public IHaveA,
public IHaveB,
public IHaveC
{
};
//如果如上所声明的话则 构造顺序

IHaveA->IHaveB->IHaveC

[解决办法]
派生类需要调用基类构造函数,所以顺序和基类的一样。
[解决办法]
引用:
Quote: 引用:

比如有这样几个类

class IHaveA
{
protected:
A m_a;
};

class IHaveB
{
protected:
B m_b;
};

class IHaveC
{
protected:
C m_c;
};


然后我这样继承

class IHaveABC:
public IHaveA,
public IHaveB,
public IHaveC
{
};


那么m_a,m_b,m_c的构造顺序是什么
是根据public的顺序来决定的么?
这个没有标准的答案,完全跟编译器相关。不过一般编译器厂商都是按顺序来的。

C++标准规定了从左到右的顺序

读书人网 >C++

热点推荐