您现在的位置: 天极网 > 开发频道 > C++程序设计中的多态技术研究
全文

C++程序设计中的多态技术研究

2003-12-28 11:27作者:荣耀出处:荣耀网站责任编辑:方舟
  两种多态机制的结合使用

  在一些高级C++应用中,我们可能需要结合使用动态多态和静态多态两种机制,以期达到对象操作的优雅、安全和高效。例如,我们既希望一致而优雅地处理vehicles的run问题,又希望“安全而高效”地完成给飞行器(飞机、飞艇等)进行“空中加油”这样的高难度动作。为此,我们首先将上面的vehicles类层次结构改写如下:

// dscombine_poly.h

#include <iostream>
#include <vector>

// 公共抽象基类Vehicle
class Vehicle
{
 public:
  virtual void run() const = 0;
};

// 派生于Vehicle的具体类Car
class Car: public Vehicle
{
 public:
  virtual void run() const
  { 
   std::cout << "run a car\n";
  }
};

// 派生于Vehicle的具体类Airplane
class Airplane: public Vehicle
{
 public:
  virtual void run() const
  {
   std::cout << "run a airplane\n";
  }


 void add_oil() const
 {
  std::cout << "add oil to airplane\n";
 }
};

// 派生于Vehicle的具体类Airship
class Airship: public Vehicle
{
 public:
  virtual void run() const
  {
   std::cout << "run a airship\n";
  }


  void add_oil() const
  {
   std::cout << "add oil to airship\n";
  }
};

  我们理想中的应用程序可以编写如下:

// dscombine_poly.cpp

#include <iostream>
#include <vector>
#include "dscombine_poly.h"

// run异质vehicles集合
void run_vehicles(const std::vector<Vehicle*>& vehicles)
{
 for (unsigned int i = 0; i < vehicles.size(); ++i)
 {
  vehicles[i]->run(); // 根据具体的vehicle类型调用对应的run()
 }
}

 // 为某种特定的aircrafts同质对象集合进行“空中加油”
 template <typename Aircraft>
 void add_oil_to_aircrafts_in_the_sky(const std::vector<Aircraft>& aircrafts)
 {
  for (unsigned int i = 0; i < aircrafts.size(); ++i)
  {
   aircrafts[i].add_oil();
 }
}

 int main()
 {
  Car car1, car2;
  Airplane airplane1, airplane2;

  Airship airship1, airship2;
  std::vector<Vehicle*> v; // 异质vehicles集合
  v.push_back(&car1);
  v.push_back(&airplane1);
  v.push_back(&airship1);
  run_vehicles(v); // run不同种类的vehicles

  std::vector<Airplane> vp; // 同质airplanes集合
  vp.push_back(airplane1);
  vp.push_back(airplane2);
  add_oil_to_aircrafts_in_the_sky(vp); // 为airplanes进行“空中加油”

  std::vector<Airship> vs; // 同质airships集合
  vs.push_back(airship1);
  vs.push_back(airship2);
  add_oil_to_aircrafts_in_the_sky(vs); // 为airships进行“空中加油”
}

  我们保留了类层次结构,目的是为了能够利用run_vehicles()一致而优雅地处理异质对象集合vehicles的run问题。同时,利用函数模板add_oil_to_aircrafts_in_the_sky<Aircraft>(),我们仍然可以处理特定种类的vehicles — aircrafts(包括airplanes和airships)的“空中加油”问题。其中,我们避开使用指针,从而在执行性能和类型安全两方面达到了预期目标。

共5页。 9 1 2 3 4 5 :

软件资讯·软件下载尽在天极软件

相关搜索:
相关文章及软件
关注此文读者还看过
热门关注
特别推荐
网友关注
软件下载
娱乐下载
驱动下载
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众