读书人

虚函数有关问题

发布时间: 2012-03-26 15:46:56 作者: rapoo

虚函数问题
刚刚一帖还有一个小问题没弄懂:

class A{

public :
void f(){ printf( "this is a::f(double)\n ");}
};

class B: public A{

public:
void f(double b){ printf( "this is b::f(Complex)\n ");
}
};

int main(){


B b;
b.f();//编译出错
b.f(2.0); // this is b::f(Complex)

return 0}

个人想法:如果子类中有同名方法(参数,返回值和父类同名方法可能不同),将无法调用父类方法,如上b.f()想调用父类无参方法,将编译出错。
只有子类中没有和父类重名的方法,才能有调用到父类方法。
不知我的想法对不对,请各位指教。

[解决办法]
b.A::f();
[解决办法]
同名函数,derived类覆盖base类的
[解决办法]
1。显式限制可以的执行基类的public同名函数
2。virtual机制+显示限制
[解决办法]
只有子类中没有和父类重名的方法,才能有调用到父类方法。
===========================
不同名的函数,同样不能直接的使用,需显式的限制
[解决办法]
如果A类中f()前有virtual才可以称为是虚函数。因此
B b;
b.f();
这样写肯定会出错。
[解决办法]
用对象,可以
base指针,引用则不能的
所以说的virtual
[解决办法]
分析是对的,但是这种做法(派生类里面有和基类同名的函数)非常不值得推荐
[解决办法]

这叫名称隐藏吧.但又不是隐藏很深...
[解决办法]
看点书去吧。

1,使用virtual修饰方法。
2,使用指针或者引用调用方法。

[解决办法]
隐藏

读书人网 >C++

热点推荐