C++ Builder 怎么重载构造器?(50分)

  • 主题发起人 主题发起人 caidao
  • 开始时间 开始时间
C

caidao

Unregistered / Unconfirmed
GUEST, unregistred user!
unit2.h
______________________________
class A
{
A(int i);
};
______________________________
unit2.cpp
______________________________
#include "Unit2.h"
A::A(int i)
{
}
______________________________
unit3.h
#include "Unit2.h"
class B: public A
{
B(int bb, int cc);
};
unit3.cpp
_________________________________
#include "Unit3.h"
B::B(int bb, int cc)
{
}
提示:
Cannot find default constructor to initialize base class 'A'
 
unit2.h
______________________________
class A
{
A(int i){};
};
______________________________
unit2.cpp
______________________________
#include "Unit2.h"
A::A(int i)
{
}
______________________________
unit3.h
#include "Unit2.h"
class B: public A
{
B(int bb, int cc);
};
unit3.cpp
_________________________________
#include "Unit3.h"
B::B(int bb, int cc)
{
}
我记得要在A()后加一个{}
 
加{}只是定义一个空的过程,我在unit2.cpp里已经加了。
______________________________
#include "Unit2.h"
A::A(int i)
{
}
问题好象是B在构造的时候,先要调用A的构造器,但是A没有默认的构造器,它不知道怎么调用。除了给A的构造器默认值外,我不知道知道做。
希望高人继续指点。
 
B::B(int bb, int cc): A(bb)
{
}
搞定。
 
在派生类调用构造函数的时候是一定会调用A的构造函数的。
像你这样的调用
B::B(int bb, int cc): A(bb)
{
}
就是调用了A中的拷贝构造函数,你也在A类中定义了。
而如果直接写成
B::B(int bb, int cc)
{
}
就是调用A的默认构造函数,也就是A:A()。但是你已经定义了一个拷贝构造函数,c++编译器就不会再你生成一个默认的构造函数了,所以就会产生编译错误。如果你删除掉在A中定义的拷贝构造函数,就可以了,或者是直接定义默认拷贝函数。
编译器什么时候为你生成构造函数,什么时候不生成,你可以参看Lippman的Inside C++ Model
 
谢谢你的回答。
老兄,有电子中文版吗?谢谢。
 
是这样的,在传给派生类的参数中必须指定同时传给基类的构造函数的参数
 
接受答案了.
 
后退
顶部