《C++面向对象程序设计》教案 联系客服

发布时间 : 星期日 文章《C++面向对象程序设计》教案更新完毕开始阅读671869ea998fcc22bcd10d3f

5.5 虚函数

1、引入派生类后的对象指针 例: class A { public:

void show(){ cout<<\};

class B:public A { public:

void show(){ cout<<\};

int main() { A a,*pc; B b;

pc=&a; pc->show(); pc=&b; pc->show(); } 输出为AA

2、虚函数的定义及使用

例:引入虚函数后,上面的例子改为如下 class A { public:

virtual void show(){ cout<<\};

class B:public A { public:

void show(){ cout<<\};

int main() { A a,*pc; B b;

pc=&a; pc->show(); pc=&b; pc->show(); }

输出为AB

3、纯虚函数和抽象类 例: class A { public:

virtual void show()=0; };

class B:public A { public:

void show(){ cout<<\};

int main() { A *pc; B b;

pc=&b; pc->show(); }

关于虚函数,有以下几点

1、如果成员函数是通过引用或指针,而不是通过对象来调用,那么,如果没有使用virtual,程序将根据引用类型或指针类型来选择方法;如果使用了virtual,程序将根据引用或指针指向的对象的类型来选择方法。

2、如果要在派生类中重新定义基类的方法,则将它设置为虚拟方法,否则是指为非虚拟方法

3、如果使用指向对象的引用或指针来调用虚拟方法,程序将使用为对象类型定义的方法,而不使用为引用类型或指针类型定义的方法,这称为动态联编或晚期联编。

4、在基类方法的声明中使用virtual可使该方法在基类以及所有的派生类中都是虚拟的。 5、一个未在派生类中定义的纯虚函数仍旧还是一个纯虚函数,该派生类仍为一个抽象类。 6、通常应给基类提供一个虚拟析构函数,这样,当派生类对象结束时,将先调用派生的析构函数,再调用基类的析构函数。

7、如果派生类没有重新定义虚拟函数,则将使用该函数的基类版本。

8、如果重新定义继承的方法,应确保与原来的原型完全相同。但有一个例外,就是如果返回类型是基类指针或引用,则可改为指向派生类的指针或引用。

实验 1 2 3 4 5 6

基本C++程序设计 类和对象程序设计 派生与继承程序设计 运算符重载程序设计 模板程序设计 I/ O 流程序设计