一、
#include
#include
using namespace std;
class A{
public:
virtual void foo(int i = 10){
cout << "Base:foo()" << i*i << endl;
}
virtual void f(double b){
cout << "Base:f()";
}
};
class B: public A{
public:
virtual void foo(int i = 5){
cout << "Derived:foo()" << i*i << endl;
}
void f(complex c){
cout << "Derived:f()";
}
};
void main()
{
A* pa = (A*)new B();
pa->foo();
pa->f(2.10);
B* pb = new B();
A* pa2 = pb;
pa2->foo();
pa2->f(2.10);
B b;
b.f(1.0);
}
输出结果为
Derived:foo()100
Base:f()
Derived:foo()100
Base:f()
Derived:f()
1. 只有虚拟函数才会有动态绑定,所以 pa->foo()和 pa2->foo()调用的都是派生类中的 foo()
函数,而由于在派生类中声明的 void f(complex )函数由于不是 virtual 函数,同基类中的
void f(double)函数没有任何关系,派生类完全继承了基类中的 void f(double)函数,所以 pa-
- 1
- 2
- 3
前往页