子类如何调用抽象基类的构造函数?

ciahi 2008-11-06 10:57:50
class A{
public:
A();
virtual ~A();

virtual Method() = 0;
};

class B:public A{
B();
};

B::B()
{
A:A(); //这样调用有错误!!!
}

我要调用A的构造函数应该怎么做??

谢谢!!!
...全文
347 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoxingxian 2011-07-08
  • 打赏
  • 举报
回复
B(int i):A(i) //这样写就会调用父类指定的构造函数了

如果将上面的写成这样:
B(int i)
{
A(i);
}
为什么为提示没有相应的构造函数?
ciahi 2008-11-06
  • 打赏
  • 举报
回复
哦,我的需求是这样的:
A有几个成员变量 
在A()的构造函数中就要使用这成员变量的值

而在B继承过来之后,要先在B()的构造函数中先把这个变量赋值,然后再调用A()

呵呵,我这刚开始学用C++的类,所以设计起来可能也有问题

我想办法来解决吧

非常感谢!!!
ckt 2008-11-06
  • 打赏
  • 举报
回复
发现这两种方法都是先调用父类构造函数,然后再执行子类构造函数里面的内容

有没有办法先执行子类里面的代码,然后再去调用父类的构造函数???

---------------------------

不行, 不知你是什么情况, 需要这样使用呢?
ciahi 2008-11-06
  • 打赏
  • 举报
回复
哦,谢谢大家

刚才试了一下

发现这两种方法都是先调用父类构造函数,然后再执行子类构造函数里面的内容

有没有办法先执行子类里面的代码,然后再去调用父类的构造函数???

谢谢!!!
ssdx 2008-11-06
  • 打赏
  • 举报
回复

class CBase
{
public:
CBase(){std::cout << "Base constructor!" << std::endl;}
virtual ~CBase(){}
virtual void empty() const = 0;
};

class CDerived : public CBase
{
public:
CDerived():CBase() //调用父类构造函数
{

}
void empty() const
{

}
};


可以那么用,不过例子里面,这么调多余。
biosli 2008-11-06
  • 打赏
  • 举报
回复
另外,你例子里面
B::B()
{
A:A(); //这样调用有错误!!!
}

是生成了一个A的对象。
biosli 2008-11-06
  • 打赏
  • 举报
回复
你这个例子举的不好,应该是这样吧。

class A
{
public:
A():m_i(0){}
A(int i):m_i(i){}
virtual ~A(){}
private:
int m_i;
}

class B : public A
{
public:
B(){}//子类自动调用父类A()构造

//要调用A(int i)构造
B(int i):A(i) //这样写就会调用父类指定的构造函数了
{}
virtual ~B(){}
}

不知道你是不是这个意思?
freshairfly 2008-11-06
  • 打赏
  • 举报
回复
父类的构造函数会自动被调用的
killbug2004 2008-11-06
  • 打赏
  • 举报
回复
不需要手动调用,B类对象调用构造函数时会自动调用基类的构造函数
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"Base constructor!"<<endl;
}
virtual ~A()
{
}
virtual void Method() = 0;
};

class B:public A
{
public:
B();
void Method();
~B()
{
}
};

B::B()
{
//A:A(); //这样调用有错误!!!
}
void B::Method()
{
}
void main()
{
B b;
}

输出:Base constructor!
Jarrys 2008-11-06
  • 打赏
  • 举报
回复
class A{
public:
A();
virtual ~A();

virtual Method() = 0;
};

class B:public A{
B();
};

B::B():A() { }

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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