修练8年C++面向对象程序设计之体会
来源:互联网 发布:软件测试经典bug 编辑:程序博客网 时间:2024/06/06 16:56
修练8年C++面向对象程序设计之体会
2005-04-29 09:58 出处: 作者:林锐 责任编辑:xietaoming
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)派生类的功能可以被基类指针引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。以前写的程序可以被将来写的程序调用不足为奇,但是将来写的程序可以被以前写的程序调用那可了不起。
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会 .
- 修练8年C++面向对象程序设计之体会
- 修练8年C++面向对象程序设计之体会
- 如何防止单例模式被JAVA反射攻击
- 修练8年C++面向对象程序设计之体会
- Ubuntu codeblocks中文不显示及配色方案
- 1.2 继承与组合
- Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net
- 修练8年C++面向对象程序设计之体会
- vim 复制粘贴和剪切
- Atitit,通过pid获取进程文件路径 java php c#.net版本大总结
- Android 自定义滑动进度条
- iOS 中用@try @catch
- 浅谈自定义cell的心得
- linux软件包安装
- 单例的两种创建方式
- Unity学习日记-Creating Scripts