《C 中基类和派生类能否构成一个重载函数集》由会员分享,可在线阅读,更多相关《C 中基类和派生类能否构成一个重载函数集(2页珍藏版)》请在金锄头文库上搜索。
1、问题:在C+中基类和派生类的成员函数能否构成一个重载函数集?先看下面代码? #pragma once #include using namespace std; class Base public: void f(int x) cout using namespace std; class Base public: void f(int x) cout f(int x) endl; void f(double x) cout f(double x) endl; ; class Derived : public Base public: Base:f; /将Base:f引入到作用域Derived
2、,且访问权限为public / using Base:f; 或者我们可以用using语句将Base:f引入到作用域Derived,且访问权限为public void f(void) cout f(void) endl; ; void main() Base a; a.f(1); a.f(1.0); Derived b; b.f(1); 这时编译通过。请同学们注意在课堂上讲过Base:f;可以恢复继承的基类成员的访问权限,它的语义实际上是:将基类成员引入到派生类的作用域,而且访问权限和在基类里的一样。另外可以用using语句达到同样的效果。 当然,要解决上面的问题还有个办法,就是这样访问基类的v
3、oid f(double x) b.Base:f(1); 但这样的写法让人感觉不舒服,通过对象b调用 void f(void)可以写b.f();,但要调用void f(int x) 却必须写成b.Base:f(1);。这样写失去了重载的意义。重载的意义是使用同一个函数调用表达式,达到静态的多态性。 另外,在JAVA里上述问题不存在。请看代码: class A public void f(int i) public void f(double d) class B extends A public void f() public static void main(String args) new B().f(1);