类私有继承时候的构造函数的问题
class add
{
public:
int a,b;
add(int m,int n)
{
a=m;
b=n;
}
void cal(void)
{
cout<<a<<"+"<<b<<a+b<<endl;
}
};
class div:private add
{
public:
int a,b;
div(int m,int n):add(m,n)
{
a=m;
b=n;
}
void cal(void)
{
cout<<a<<"/"<<b<<a/b<<endl;
}
};
提示是:no appropriate default constructor available
私有继承的时候,基类的所有函数都是私有的,应该也包括构造函数。但是基类的子类要继承基类的话应该是要调用基类的构造函数的。请问这个怎么解决呢?
问题点数:10、回复次数:6Top
1 楼UPCC(杂食动物)回复于 2006-07-03 10:56:12 得分 0
你的程序没有问题,而且
私有继承的时候,基类的所有函数都是私有的,应该也包括构造函数。但是基类的子类要继承基类的话应该是要调用基类的构造函数的。请问这个怎么解决呢?
-------------------------------
这句话不知道真实要表示什么?你要解决的是什么问题?因为你前面的描述是合理的Top
2 楼Jim_King_2000()回复于 2006-07-03 11:03:36 得分 0
class div:private add相当于
class div
{
private:
add m_add;
...
}
所以div的成员函数是可以调用add的成员函数的。只不过在别的地方就不能够用div类型的对象去调用add的成员函数了。Top
3 楼ican03(我想我可以)回复于 2006-07-03 11:27:24 得分 0
但是不知道为什么会编译错误啊Top
4 楼sharpdew(风刃)回复于 2006-07-03 11:46:46 得分 5
估计是你这样调用类生成对象了:
div d;
这样的话因为你的类中没有定义不带参数的构造函数,所以就会出现你描述的那种错误。Top
5 楼rollor_phoe(柔枫)回复于 2006-07-03 12:31:27 得分 5
你在main()函数中创建对像时,用的是div ab;因为没有不带参数的默认构造函数,所以没有构造函数所用。
你在创建对象时加上参数就没有问题了。
还有我在VC6.0中调试好像div有问题吧!
我改成diu就行了。Top
6 楼Improving()回复于 2006-07-03 13:16:18 得分 0
sharpdew和rollor_phoe说得没错。Top




