带参构造函数初始化类对象的问题?

csuc20 2006-04-30 02:15:40
一般情况我知道如何处理,就是用构造函数初始化表,但是这种就不行了
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(参数); 又需要重载=符,我看很多类都不能用=符,难道我只需要简单的初始化一个类对象,非得重载=吗?而且我不知道怎么重载=符呢,是不是还要定义拷贝函数啊?
...全文
329 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqk 2006-04-30
  • 打赏
  • 举报
回复
a::a() : b(1)
{}
MuseIn 2006-04-30
  • 打赏
  • 举报
回复
构造函数有个特殊的初始化方式叫“初始化表达式表”(简称初始化表)。初始化表位于函数参数表之后,却在函数体 {} 之前。该表里的初始化工作发生在函数体内的任何代码被执行之前。
构造函数初始化表的使用规则:
如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数。
例如
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的构造函数
{

}
csuc20 2006-04-30
  • 打赏
  • 举报
回复
MuseIn(air supply * 学好Linux)
b::b() : m_c(1)
{}
a::a() : b(1)
{}

这样处理的话m_c是在b类的构造函数中初始化的。
如果我希望从b类继承的另外一个类,初始化m_c,参数为2,既m_c(2),那不是不行了吗?
MuseIn 2006-04-30
  • 打赏
  • 举报
回复
b::b() : m_c(1)
{}
a::a() : b(1)
{}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧