标题:请问个问题
只看楼主
shediao
Rank: 1
来 自:山东
等 级:新手上路
威 望:1
帖 子:52
专家分:0
注 册:2008-9-23
结帖率:100%
 问题点数:0 回复次数:3 
请问个问题
class A{
public: void f(){};
};
class B{
public: void f(int x){};
};
int main(){
B b;
//b.f();//为什么这个是错的
b.f(2);
return 0;
}
请问一下b.f()为什么是错的
搜索更多相关主题的帖子: 问题 
2008-12-14 13:17
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
得分:0 
B都没有在A上继承肯定错了,我想你的原意是在A上继承了。但如果这样继承之后,若要在B中定义F函数,你B中的F函数的定义必须要定义一个与A的定义原形一样这样才能保证隐藏基类的函数,或者不定义F函数,注意,重载不能在父类与子类之间进行必需是同一个类内,父类与子类之间只存在隐藏与覆盖的关系你的程序可以改成下面的两个都行。

class A{
public: void f(){};
};
class B:public A{
public: void f(int x){};
        void f(){};//若定义F函数这个必需有
};
int main(){
B b;
b.f();//为什么这个是错的
b.f(2);
return 0;
}


class A{
public: void f(){};
};
class B:public A{
//或者什么都别定义
};
int main(){
B b;
b.f();

return 0;
}

雁无留踪之意,水无取影之心
2008-12-14 15:02
chendianbo
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-12-14
得分:0 
因为类B中的函数f(int x)他的成员函数明确了带有参数的成员函数,因此在对象实例化调用的时候是要初始化参数的。这是成员函数,要是构造函数了,就还要复杂一点了
2008-12-14 19:24
hitcolder
Rank: 1
等 级:新手上路
威 望:1
帖 子:124
专家分:0
注 册:2008-10-28
得分:0 
回复 第2楼 PcrazyC 的帖子
学习下

不要在你的智慧中夹杂傲慢,也不要使你们的谦卑缺乏智慧的成分。
2008-12-15 12:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-249282-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.130869 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved