AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > C++

C++面向对象程序设计的重要概念

51自学网 http://www.51zixue.net

  虚函数与多态

  除了继承外,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++基本数据类型与输入输出  下一篇:使用CreateProcess()函数