怎样才能写出一个好的类?(委托构造、初始化、类型别名)

4 篇文章 0 订阅

委托构造

一个构造函数直接调用另一个构造函数,把构造工作“委托”出去,既简单又高效。


class DemoDelegating final
{
private:
    int a;                              // 成员变量
public:
    DemoDelegating(int x) : a(x)        // 基本的构造函数
    {}  

    DemoDelegating() :                 // 无参数的构造函数
        DemoDelegating(0)               // 给出默认值,委托给第一个构造函数
    {}  

    DemoDelegating(const string& s) : // 字符串参数构造函数
        DemoDelegating(stoi(s))        // 转换成整数,再委托给第一个构造函数
    {}  
};

成员变量的初始化
C++11以后可以直接在初始化成员变量的时候初始化成员


class DemoInit final                  // 有很多成员变量的类
{
private:
    int                 a = 0;        // 整数成员,赋值初始化
    string              s = "hello";  // 字符串成员,赋值初始化
    vector<int>         v{1, 2, 3};   // 容器成员,使用花括号的初始化列表
public:
    DemoInit() = default;             // 默认构造函数
   ~DemoInit() = default;             // 默认析构函数
public:
    DemoInit(int x) : a(x) {}         // 可以单独初始化成员,其他用默认值
};

类型别名
using和typedef


using uint_t = unsigned int;        // using别名
typedef unsigned int uint_t;      // 等价的typedef

具体的使用方式,可以将很长一类的命名化简


class DemoClass final
{
public:
    using this_type         = DemoClass;          // 给自己也起个别名
    using kafka_conf_type   = KafkaConfig;        // 外部类起别名

public:
    using string_type   = std::string;            // 字符串类型别名
    using uint32_type   = uint32_t;              // 整数类型别名

    using set_type      = std::set<int>;          // 集合类型别名
    using vector_type   = std::vector<std::string>;// 容器类型别名

private:
    string_type     m_name  = "tom";              // 使用类型别名声明变量
    uint32_type     m_age   = 23;                  // 使用类型别名声明变量
    set_type        m_books;                      // 使用类型别名声明变量

private:
    kafka_conf_type m_conf;                       // 使用类型别名声明变量
};

类型别名的好处:可以将类型随便变换成其他类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值