zoukankan      html  css  js  c++  java
  • 读google的C++编码规范类部分小结

    正在看<google的C++编码规范>,对于类部分写个小结,记录一下:

    1.构造函数只进行那些没有实际数据意义的初始化,需要做实际数据的初始化时,使用Init()函数来集中初始化
    
    2.类存在成员变量时,如果没有构造函数,自己定义一个默认构造函数,不要使用编译器自动生成的构造函数
    
        优点:默认将结构体初始化为"不可能"的值,使调试更加容易
    
    3.对单参数构造函数使用C++关键字explicit
    
        优点:避免不可时宜的转换
    
    4.仅在需要拷贝一个类对象时定义拷贝构造函数,不需要拷贝时应使用DISALLOW_COPY_AND_ASSIG.
    
        为了避免编译器自动生成的拷贝构造函数,可以定义一个private的空拷贝构造函数
    
    5.当只有数据时,使用struct,其他时候使用class
    
    6.使用组合通常比继承更合适,如果要使用继承,只适用公共继承.努力做到只有在"is-a"的情况下使用继承,其他"has-a"的情况下使用组合.
    
        如果该类中有虚函数,则令析构函数为virtual
    
        限定仅在子类访问的成员函数为protect,另外数据成员应始终为私有
    
        在中定义派生的虚函数时,需要明确声明该函数为virtual(为了良好的代码可读性)
    
    7.只有当最多只有一个基类中含有实现,其他基类都是以interface为后缀的纯接口类时才会使用多重继承
    
    8.接口类需要满足:
    
        1).只有纯虚函数和静态函数(以及虚析构函数)
    
        2).没有非静态数据成员
    
        3).没有定义任何构造函数,如果有,则为protected且无参数的构造函数
    
        4).如果该interface类是子类,也只能继承满足相同条件的父类
    
    9.基本不使用重载操作符
    
        极少数情况需要和模板或"标准C++类"连接时的使用方法,具体见原文档
    
    10.将数据成员私有化,并提供相关存取函数,
    
        如:定义变量foo_();取值foo();赋值set_foo();一般可使用内联函数
    
    11.声明次序:public在private之前,成员函数在成员变量之前
    
        定义次序:public,protected,private
    
        每一块的声明次序:1)typedef和enums,2)常量,3)构造函数,4)析构函数,5)成员函数(含静态成员),6)数据成员(含静态数据成员)
    
    12.编写短小,凝练,功能单一的函数



    原文档也有小结,中文文档地址

     

  • 相关阅读:
    线程安全 ---Struts1与Struts2
    sql servset 有表,没表备份数据。
    group by 使用及体会 和having用法
    js 去掉输入的空格
    struts + json + ajax +级联 例子
    js 级联 思路
    return break continue 的用法和作用
    eclise 怎么集成 spket 。及spket 与 sdk.jsb3管理起来
    logback基本用法
    log4j:特定类的日志输出到指定的日志文件中
  • 原文地址:https://www.cnblogs.com/qooweds/p/4032860.html
Copyright © 2011-2022 走看看