1.3 虚函数与多态
除了继承外,C++的另一个优良特性是支持多态,即允许将派生类的对象当作基类的对象使用。如果A 是基类,B 和C 是A 的派生类,多态函数Test 的参数是A 的 指针。那么Test 函数可以引用A、B、C 的对象。示例程序如下:
class A
{
public:
void Func1(void);
};
void Test(A *a)
{
a->Func1();
}
class B : public A
{
…
};
class C : public A
{
…
};
// Example
main()
{
A a;
B b;
C c;
Test(&a);
Test(&b);
Test(&c);
};
以上程序看不出“多态”有什么价值,加上虚函数和抽象基类后,“多态”的威力就显示出来了。
C++用关键字virtual 来声明一个函数为虚函数,派生类的虚函数将(override)基类对应的虚函数的功能。示例程序如下:
class A
{
public:
virtual void Func1(void){ cout<< “This is A::Func1 \n”}
};
void Test(A *a)
{
a->Func1();
}
class B : public A
{
public:
virtual void Func1(void){ cout<< “This is B::Func1 \n”}
};
class C : public A
{
public:
virtual void Func1(void){ cout<< “This is C::Func1 \n”}
};
// Example
main()
{
A a;
B b;
C c;
Test(&a); // 输出This is A::Func1
Test(&b); // 输出This is B::Func1
Test(&c); // 输出This is C::Func1
};
如果基类A 定义如下:
class A
{
public:
virtual void Func1(void)=0;
};
那么函数Func1 叫作纯虚函数,含有纯虚函数的类叫作抽象基类。抽象基类只管定义纯虚函数的形式,具体的功能由派生类实现。
结合“抽象基类”和“多态”有如下突出优点:
(1)应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。这一
招叫“以不变应万变”,可以大大提高程序的可复用性(这是接口设计的复用,而不是代码实现的复用)。
(2)派生类的功能可以被基类指针引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。以前写的程序可以被将来写的程序调用不足为奇,但是将来写的程序可以被以前写的程序调用那可了不起。
分享到:
相关推荐
主要讲述了C++中的一些关键点的重点,以及别人使用C++以来的一些心得体会,对于抓住C++中的重点是一个比较好的文档
修练8年C++面向对象程序设计之体会.pdf
该文件是谭浩强《谭浩强 C++面向对象程序设计》电子扫描版,高清
面向对象程序设计 c++面向对象程序设计 c++面向对象程序设计
c++面向对象程序设计杜茂康 课后习题代码及结果
C++面向对象程序设计习题集,主要练习面向对象思想。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
C++面向对象程序设计教程(第3版)——陈维兴、林小茶编著 清华大学出版社 这个是对应的PPT课件,文件为压缩包,里面每章一个PPT文件。
面向对象程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,能够较好地支持程序代码的复用。 2.面向对象程序设计语言有四个特征: ⑴ 抽象性 ---- 许多实体的共性产生类。 ⑵ ...
C++面向对象程序设计课后答案(清华大学出版社)
c++面向对象程序设计第三版谭浩强教学大纲.pdf
c++面向对象程序设计_杜茂康_课后答案[1-6章]_
c++面向对象程序设计课后习题答案c++面向对象程序设计课后习题答案c++面向对象程序设计课后习题答案
C++面向对象程序设计电子教案C++面向对象程序设计电子教案C++面向对象程序设计电子教案C++面向对象程序设计电子教案C++面向对象程序设计电子教案C++面向对象程序设计电子教案C++面向对象程序设计电子教案C++面向对象...
C++面向对象程序设计C++面向对象程序设计C++面向对象程序设计C++面向对象程序设计C++面向对象程序设计
C++面向对象程序设计课程设计报告.pdf
很全面的C++面向对象程序设计课件,一定让你收益匪浅……
C++面向对象程序设计上机考试题库.pdf