多态调用和普通调用
C++中只有两个调用关系,分为普通调用和多态调用。不满足多态调用就是普通调用。
多态必须构成的两个条件
- 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写(也就是必须满足重写)
- 必须通过基类的指针或者引用调用虚函数(指针和引用)
多态调用:跟指向的对象有关,传的对象是谁的,调用的就是谁的。
普通调用:和类型有关。类型是什么调用就是什么,类型是Person的,那么调用的函数就是Person的。 比如下面的例子。
普通调用的例子:
class A {
};
class B : public A{
};
class Person{
public:
virtual B*f(){
cout << "Person::f()" << endl;
return new B;
}
};
class Student: public Person{
public:
virtual B* f(){
cout << "Student::f()" << endl;