友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
飞读中文网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

软件工程思想-第36章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



  };

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){ coutFunc1();
  }

class B : public A
  {
    public:
  virtual void  Func1(void){ coutFunc();// p是“野指针”,程序出错
  }

6。2。4 使用const
在定义一个常量时,const比 #define更加灵活。用const定义的常量含有数据类型,该常量可以参与逻辑运算。例如:
constint LENGTH = 100;// LENGTH是int类型
constfloatMAX=100;// MAX是float类型
#defineLENGTH  100// LENGTH 无类型
#defineMAX 100// MAX 无类型

除了能定义常量外,const还有两个“保护”功能:
  一、强制保护函数的参数值不发生变化
以下程序中,函数f不会改变输入参数name的值,但是函数g和h都有可能改变name的值。
void f(String  s);// pass by value
void g(String &s);// pass by referance
void h(String *s);// pass by pointer
main()
  {
String  name=“Dog”;
f(name);// name的值不会改变
g(name);// name的值可能改变
h(name);// name的值可能改变
  }

对于一个函数而言,如果其‘&’或‘*’类型的参数只作输入用,不作输出用,那么应当在该参数前加上const,以确保函数的代码不会改变该参数的值(如果改变了该参数的值,编译器会出现错误警告)。因此上述程序中的函数g和h应该定义成:
void  g(const String &s);
void  h(const String *s);

  二、强制保护类的成员函数不改变任何数据成员的值
以下程序中,类stack的成员函数Count仅用于计数,为了确保Count不改变类中的任何数据成员的值,应将函数Count定义成const类型。
class Stack
  {
  public:
void push(int elem);
void pop(void);
intCount(void)  const;// const类型的函数
  private:
intnum;
intdata'100';
  };

int Stack::Count(void)  const
  {
++ num;// 编译错误,num值发生变化
  pop();// 编译错误,pop将改变成员变量的值
  return num;


6。2。5 其它建议
(1)不要编写一条过分复杂的语句,紧凑的C++/C代码并不见到能得到高效率的
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!