C++面向对象入门(三十二)虚函数和实现动态联编的条件
虚函数: 一个成员函数, 该函数在基类的内部声明并且被派生类重新定义, 为了创建虚函数, 应在基类该函数
声明的前面加上virtual关键字
如果一个类的某个成员函数被说明为虚函数, 意味着该成员在派生类中可能存在不同的实现方式, 当继承包含
虚函数的类时, 派生类将重新定义该虚函数以符合自身的需要.
声明的前面加上virtual关键字
如果一个类的某个成员函数被说明为虚函数, 意味着该成员在派生类中可能存在不同的实现方式, 当继承包含
虚函数的类时, 派生类将重新定义该虚函数以符合自身的需要.
动态联编需要满足三个条件:
1 类之间满足兼容赋值规则
2 声明虚函数
3 使用类的指针或者引用访问虚函数或者通过成员函数调用虚函数
1 类之间满足兼容赋值规则
2 声明虚函数
3 使用类的指针或者引用访问虚函数或者通过成员函数调用虚函数
虚函数只能是非静态成员函数
构造函数能重载, 不能定义为虚函数, 而析构函数不能重载, 但是可以被定义为虚函数
代码示例:
#include <iostream> using namespace std; /* 虚函数: 一个成员函数, 该函数在基类的内部声明并且被派生类重新定义, 为了创建虚函数, 应在基类该函数 声明的前面加上virtual关键字 如果一个类的某个成员函数被说明为虚函数, 意味着该成员在派生类中可能存在不同的实现方式, 当继承包含 虚函数的类时, 派生类将重新定义该虚函数以符合自身的需要. 动态联编需要满足三个条件: 1 类之间满足兼容赋值规则 2 声明虚函数 3 使用类的指针或者引用访问虚函数或者通过成员函数调用虚函数 */ class A49 { public: A49(); void callVtFunc(); virtual void vtFunc(); }; class B49 : public A49 { public: B49(); virtual void vtFunc(); }; int main() { A49 a; B49 b; a.callVtFunc(); b.callVtFunc(); system("pause"); } A49::A49() { } void A49::callVtFunc() { vtFunc(); } void A49::vtFunc() { cout << "function of A49" << endl; } B49::B49() { } void B49::vtFunc() { cout << "function of B49" << endl; }
路漫漫其修远兮,吾将上下而求索。