《高质量程序设计指南C/C++语言》 林锐 韩永泉编著 总结3

第 9 章  类的构造函数、析构函数与赋值函数

1.构造函数初始化表的使用规则:

1)如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数。

2)类的 const 常量只能在初始化表里被初始化,因为它不能在函数体内用赋值的方式来初始化。

3)类的数据成员的初始化可以采用初始化表或函数体内赋值两种方式,这两种方式的效率不完全相同。

2. 类 String 的构造函数与析构函数

// String 的普通构造函数

 String::String(const char *str)

{

 if(str==NULL)

 {

    m_data = new char[1];

  *m_data = ‘\ 0’;

 } 

 else

 {

    int length = strlen(str);

    m_data = new char[length+1];

  strcpy(m_data, str);

}

}  

// String 的析构函数

 String::~String(void)

{

  delete [] m_data;  

// 由于 m_data 是内部数据类型,也可以写成delete m_data;

 }

3. 类 String 的拷贝构造函数与赋值函数

// 拷贝构造函数

 String::String(const String &other)

 { 

// 允许操作 other 的私有成员m_data

  int length = strlen(other.m_data);  

  m_data = new char[length+1];

 strcpy(m_data, other.m_data);

}

// 赋值函数

 String & String::operate =(const String&other)

 { 

  // (1) 检查自赋值

  if(this == &other)

   return *this;

  

  // (2) 释放原有的内存资源

  delete [] m_data;

  

  // (3)分配新的内存资源,并复制内容

int length =strlen(other.m_data);  

  m_data = new char[length+1];

  strcpy(m_data, other.m_data);

  

  // (4)返回本对象的引用

  return *this;

}

第 10 章  类的继承与组合

1. 继承

规则1.如果类 A 和类 B 毫不相关,不可以为了使 B 的功能更多些而让 B

继承 A 的功能和属性。

规则2.若在逻辑上 B 是 A 的“一种” (a kind of ) ,则允许 B 继承 A 的功能和属性。

2.组合

规则.若在逻辑上 A 是 B 的“一部分” (a part of) ,则不允许 B 从 A 派生,而是要用 A 和其它东西组合出 B。

建议:

建议1.当心那些视觉上不易分辨的操作符发生书写错误。

我们经常会把“==”误写成“=” ,象“||” 、“&&” 、“<=” 、 “>=”这类符号也很容易发生“丢1”失误。然而编译器却不一定能自动指出这类错误。

建议2.变量(指针、数组)被创建之后应当及时把它们初始化,以防止把未被初始化的变量当成右值使用。

建议3.当心变量的初值、缺省值错误,或者精度不够。

建议4.当心数据类型转换发生错误。尽量使用显式的数据类型转换(让人们知道发生了什么事) ,避免让编译器轻悄悄地进行隐式的数据类型转换。

建议5.当心变量发生上溢或下溢,数组的下标越界。

建议6.当心忘记编写错误处理程序,当心错误处理程序本身有误。

建议7.当心文件 I/O 有错误。

建议8.避免编写技巧性很高代码。

建议9.不要设计面面俱到、非常灵活的数据结构。

建议10.如果原有的代码质量比较好,尽量复用它。但是不要修补很差劲的代码,应当重新编写。

建议11.尽量使用标准库函数,不要“发明”已经存在的库函数。

建议12.尽量不要使用与具体硬件或软件环境关系密切的变量。

建议13.把编译器的选择项设置为最严格状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值