C++的常用规范(二)

1、类的代码风格

2、构造函数、析构函数、复制构造函数、赋值运算操作符

3、继承

4、多重继承


1、类的代码风格

  •   类访问控制块的声明依次序是 public:, protected:, private:,缩进和 class 关键字对齐
class MyClass : public BaseClass {
public: // 注意没有缩进
    MyClass(); // 标准的4空格缩进
    explicit MyClass(int var);
    ~MyClass() {}
    void SomeFunction();
    void SomeFunctionThatDoesNothing()
    {
    }
    void SetVar(int var) { someVar = var; }
    int GetVar() const { return someVar; }
private:
    bool SomeInternalFunction();
    int someVar;
    int someOtherVar;
};
  •  构造函数初始化列表放在同一行或按四格缩进并排多行
// 如果所有变量能放在同一行:
MyClass::MyClass(int var) : someVar(var)
{
    DoSomething();
}
// 如果不能放在同一行,
// 必须置于冒号后, 并缩进4个空格
MyClass::MyClass(int var)
    : someVar(var), someOtherVar(var + 1) // Good: 逗号后面留有空格
{
    DoSomething();
}
// 如果初始化列表需要置于多行, 需要逐行对齐
MyClass::MyClass(int var)
    : someVar(var), // 缩进4个空格
    someOtherVar(var + 1)
{
    DoSomething();
}
  • 使用命名空间来限定作用域
namespace Switcher {
    class Packet {
        ...
    }
    void SendPacket(const Packet& packet);
}

namespace Router {
    class Packet{
        ...
    }
    void SendPacket(const Packet& packet);
}

    全局变量、全局常量、全局类型定义由于都属于全局作用域,在项目中使用第三方库容易出现冲突,命名空间将作用域细分为独立的具名的作用域,可有效防止全局作用域的命名冲突。 

2、构造函数、析构函数、复制构造函数、赋值运算操作符

  • 类的成员变量必须显式初始化
  • 成员变量优先使用声明时初始化(C++11)和构造函数初始化列表初始化
  • 为避免隐式转换,将单参数构造函数声明为explicit
class Foo {
public:
    explicit Foo(const string& name): name(name)
    {
    }
private:
    string name;
};

v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值