编程交流与学习--Effective C++学习之"类和函数:设计与声明"

本文详细阐述了C++编程中的28条最佳实践准则,包括类的设计与声明、函数的使用、成员变量的管理等,旨在帮助开发者提高代码质量和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第四章类和函数:设计与声明
条款18: 争取使类的接口完整并且最小
原因:“第一,接口中函数越多,以后的潜在用户就越难理解。”,“难以维护”,“导致长的头文件”。
条款19: 分清成员函数,非成员函数和友元函数
原因:与常规类的操作函数保持一致。
条款20: 避免public接口出现数据成员
原因:“一致性”“功能分离”。效率可能存在区别,测试代码如下:
#include <iostream>
#include <time.h>
 
struct A
{
private:
      int i;
public:
      int Geti(){return i;}
      A():i(0x7FFFFF){}
      ~A(){}
};
 
struct B
{
public:
      int i;
      B():i(0x7FFFFF){}
      ~B(){}
};
 
int main(void)
{   
      A a;      B b;      int i = 0;     time_t tStart, tEnd;
 
      tStart = clock();
      for(i = 0; i < a.Geti(); ++i);
      tEnd = clock();
      printf("A.Geti():%d/n", tEnd - tStart);
 
      tStart = clock();
      for(i = 0; i < b.i; ++i);
      tEnd = clock();
      printf("B.i:%d/n", tEnd - tStart);
 
      return 0;
}
条款21: 尽可能使用const
原因:编译器进行访问控制,提高安全性。“const char * const p = "hello";// const指针,const数据。画一条垂直线穿过指针声明中的星号(*)位置,如果const出现在线的左边,指针指向的数据为常量;如果const出现在线的右边,指针本身为常量;如果const在线的两边都出现,二者都是常量。”
条款22: 尽量用传引用而不用传值
原因:避免不必要的构造、拷贝、析构损耗。“ 通过引用来传递参数还有另外一个优点:它避免了所谓的“切割问题(slicing problem)”。当一个派生类的对象作为基类对象被传递时,它(派生类对象)的作为派生类所具有的行为特性会被“切割”掉,从而变成了一个简单的基类对象。
条款23: 必须返回一个对象时不要试图返回一个引用
原因:“尽可能地让事情简单,但不要过于简单。”。安全性问题。
条款24: 在函数重载和设定参数缺省值间慎重选择
原因:二义性。安全性。
条款25: 避免对指针和数字类型重载
原因:二义性。安全性。
条款26: 当心潜在的二义性
原因:安全性。
条款27: 如果不想使用隐式生成的函数就要显式地禁止它
原因:赋值运算符属于那种与众不同的成员函数,当你没有去写这个函数时,C++会帮你写一个(见条款45)。构造、析构函数也会有默认函数。避免误用了默认函数,将代码控制权握在自己手里。
条款28: 划分全局名字空间 
原因:避免名字冲突。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值