《软件工程思想》

下载本书

添加书签

软件工程思想- 第36部分


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
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代码并不见到能得到高效率的机器代码,却会降低程序的可理解性,程序出错误的几率也会提高。
(2)不要编写集多种功能于一身的函数,在函数的返回值中,不要将正常值和错误标志混在一起。
(3)不要将BOOL值TRUE和FALSE对应于1和0进行编程。大多数编程语言将FALSE定义为0,任何非0值都是TRUE。Visual C++将TRUE定义为1,而Visual Basic则将TRUE定义为…1。示例程序如下:
  BOOLflag;

if(flag){ // do something }// 正确的用法
if(flag==TRUE){ // do something }// 危险的用法
if(flag==1){ // do something }/

小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架