1、继承不要随便使用,继承规则应当是:若在逻辑上 B 是 A 的“一种” ,并且 A 的所有功能和属性对 B 而言都有意义,则允许 B 继承 A 的功能和属性。
2、 如果输入参数采用“指针传递” ,那么加 const 修饰可以防止意外地改动该指针,起到保护作用。
如:void StringCopy(char *strDestination, const char *strSource);
3、 如果输入参数采用“值传递” ,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加 const 修饰。举例:不要将函数 void Func(int x) 写成 void Func(const int x)。
4、 对于非内部数据类型的参数而言,象 void Func(A a) 这样声明的函数注定效率比较底。因为函数体内将产生 A 类型的临时对象用于复制参数 a,而临时对象的构造、复制、析构过程都将消耗时间。所以我们要用到引用传递。改成:void Func(A &a)。但还有一个问题,就是这样的话a 很容易在函数内被 意外地修改了,怎么办?这时就可以用const来帮忙:void Func(const A &a);
5、 如果给以“指针传递”方式的函数返回值加 const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加 const 修饰的同类型指针。
const char * GetString(void);
如下语句将出现编译错误:
char *str = GetString();
正确的用法是
const char *str = GetString();
如果函数返回值采用“值传递方式” ,由于函数会把返回值复制到外部临时的存储单元中,加 const 修饰没有任何价值。 例如不要把函数 int GetInt(void) 写成 const int GetInt(void)。
6、类中的const函数不能调用非const函数
class Stack
{
public:
void Push(int elem);
int Pop(void);
int GetCount(void) const; // const 成员函数
private:
int m_num;
int m_data[100];
};
int Stack::GetCount(void) const
{
++ m_num; // 编译错误,企图修改私有成员 m_num
Pop(); // 编译错误,企图调用非 const 函数
return m_num;
}
到些,《高质量C++/C编程学习笔记》系列文章已经发表完了。