虚函数问题
刚刚一帖还有一个小问题没弄懂:
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,使用指针或者引用调用方法。
[解决办法]
隐藏