帮忙解决一下一个c++小程序中的问题

定义一个基类Base,有两个公有成员函数fn1(),fn2(),私有派生出Deriver类,如何通过Deriver类的对象调用基类的函数fn1()?#include<io... 定义一个基类Base,有两个公有成员函数fn1(),fn2(),私有派生出Deriver类,如何通过Deriver类的对象调用基类的函数fn1()?
#include<iostream>
using namespace std;
class Base
{
public:
Base(int x,int y){X=x,Y=y;}
int fn1(){return X;}
int fn2(){return Y;}
private:
int X,Y;
};
class Derived:private Base
{
public:
float fn1(){return Base::fn1();}
float fn2(){return Base::fn2();}
};
void main()
{
Base a(2,3);
Derived b;
cout<<b.fn1()<<b.fn2()<<endl;
}
在调用fn1()和fn2()时,即使加上基类名:Base::fn1()也有一个错误 error C2512: 'Derived' : no appropriate default constructor available
展开
 我来答
jlz289928148
推荐于2016-08-15
知道答主
回答量:71
采纳率:0%
帮助的人:70.2万
展开全部
运行时是不是出现"no appropriate default constructor available"
翻译过来是"没有合法可用的默认构造函数".
也就是说,你的程序本身存在问题.
派生类构造函数的构造规则:
当基类的构造函数没有参数,或没有显示定义构造函数时,派生类可以不向基类传递参数,甚至可以不定义构造函数.
但是,当基类含有带有参数的构造函数时,派生类必须定义构造函数,以提供把参数传递给基类构造函数的途径.(你的程序正是属于这种情况,而你没有在派生类中定义构造函数)
例:
Derived(int x,int y):Base(x,y)
{}
但是,这样做了之后还是有错误,为什么呢?因为你的程序还有一个错误,
你不能指望b从a中继承啊,主函数中定义的两个对象明显是两个不同的变量.继承只是类结构的继承,对于两个不同的变量并不会发生这种"继承".
你可以把最后Derived b;改为Derived b(2,3);对b进行初始化.
这样程序运行才是正确的.
加上类名的函数访问一般是正确的.
投篮向来空心
2007-12-18 · TA获得超过2466个赞
知道小有建树答主
回答量:816
采纳率:0%
帮助的人:0
展开全部
派生类函数覆盖掉基类函数~

调用基类函数必须加上基类名:Base::fn1();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风骚的可乐
2007-12-18 · TA获得超过1550个赞
知道小有建树答主
回答量:412
采纳率:0%
帮助的人:612万
展开全部
定义一个基类Base,有两个公有成员函数fn1(),fn2(),私有派生出Deriver类,如何通过Deriver类的对象调用基类的函数fn1()?

只能通过指向基类对象的指针。

以上代码的错误之处在于Deriver类没有默认的构造函数,因此不能这样写:
Derived b; // 错误,没有构造函数可以调用,b中变量无法初始化
而应该写成:
Derived *p = (Derived *)&a; // 类型转换
Derived b(*p); // 调用隐式拷贝构造函数Derived(Derived &)

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

楼上“投篮向来空心”有概念性错误。
Base::fn1()在没有Base类型实例的情况下,使用前提是fn1是在Base中声明的static函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
张力张
2007-12-18 · TA获得超过258个赞
知道小有建树答主
回答量:601
采纳率:50%
帮助的人:126万
展开全部
看不懂,是不是……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式