一般情况我知道如何处理,就是用构造函数初始化表,但是这种就不行了
class c
{
public:
c(int i);
~c;
};
class b
{
public:
c m_c;
}
class a:public b
{
...........
}类a的构造函数
a::a() : m_c(1) //illegal member initialization
{
}
其中成员m_c是继承来的,不是直接在类A里面声明的,如果这样用初始化表来初始化m_c会编译报错:illegal member initialization。
那么如何在构造函数中初始化它呢:
m_c = c::c(参数); 又需要重载=符,我看很多类都不能用=符,难道我只需要简单的初始化一个类对象,非得重载=吗?而且我不知道怎么重载=符呢,是不是还要定义拷贝函数啊?
class c
{
public:
c(int i);
~c;
};
class b
{
public:
c m_c;
}
class a:public b
{
...........
}类a的构造函数
a::a() : m_c(1) //illegal member initialization
{
}
其中成员m_c是继承来的,不是直接在类A里面声明的,如果这样用初始化表来初始化m_c会编译报错:illegal member initialization。
那么如何在构造函数中初始化它呢:
m_c = c::c(参数); 又需要重载=符,我看很多类都不能用=符,难道我只需要简单的初始化一个类对象,非得重载=吗?而且我不知道怎么重载=符呢,是不是还要定义拷贝函数啊?
解决方案 »
- Parsing Error:Expected"afx_msg".Input Line "public" 一个具有绘图功能的MFC应用程序
- 如何在框架类MainFrm中调用视图类CMyView中的函数?
- 如何将N个图拼接在一起,计算接缝处的色彩信息,进而对关联的图像进行实时色彩调整.
- 网络编程,定义了一些结构体,大家指点下
- 如何实现重试对话框“重试功能”?
- [高分请教] 如何在多显示器下,实现主屏和从屏的设置
- 以太网交换机交换逻辑模拟(在线等!!)进来帮帮我吧.....
- 如何点击DataGrid控件的一行,然后弹出一个对话框显示着一行的内容。
- 请教高手:一个显卡上接两个显示器,实现
- 不同机器编译 在目标机器上运行不一致的问题 急
- 如何设置使一个属性页最大化。
- 用CInternetSession的OpenURL()方法发送数据就会出错,提示"无法与服务器建立连接"。
{}
a::a() : b(1)
{}
b::b() : m_c(1)
{}
a::a() : b(1)
{}这样处理的话m_c是在b类的构造函数中初始化的。
如果我希望从b类继承的另外一个类,初始化m_c,参数为2,既m_c(2),那不是不行了吗?
构造函数初始化表的使用规则:
如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数。
例如
class A
{…
A(int x); // A的构造函数
};
class B : public A
{…
B(int x, int y);// B的构造函数
};
B::B(int x, int y)
: A(x) // 在初始化表里调用A的构造函数
{
…
}