注册 登录
编程论坛 C++教室

请问个问题

shediao 发布于 2008-12-14 13:17, 880 次点击
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()为什么是错的
3 回复
#2
PcrazyC2008-12-14 15:02
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;
}
#3
chendianbo2008-12-14 19:24
因为类B中的函数f(int x)他的成员函数明确了带有参数的成员函数,因此在对象实例化调用的时候是要初始化参数的。这是成员函数,要是构造函数了,就还要复杂一点了
#4
hitcolder2008-12-15 12:28
回复 第2楼 PcrazyC 的帖子
学习下
1