C++对象初始化

目录

对象的初始化

2.构造析构和赋值


对象的初始化

1.使用对象前需要确保对象已经初始化

初始化和赋值

class PhoneNumber
{

};

class ABEntry
{
public:
    ABEntry(std::string name, std::string address, std::list<PhoneNumber>& phone, int num);
private:
    std::string mName;
    std::string mAddress;

    std::list<PhoneNumber> mPhones;
    int mNumTimeConsulted;

};

// 赋值
ABEntry::ABEntry(std::string name, std::string address, std::list<PhoneNumber>& phone, int num)
{
    mName = name;
    mAddress = address;
    mPhones = phone;
    mNumTimeConsulted = num;
}

以上操作都是进行赋值操作,而不是初始化,这样能够带来你想要的成员变量的值,但是C++有更好的办法

初始化发生的阶段比较早,一般是在进入构造函数本地之前,所以更好的做法就是使用初始化模板

ABEntry::ABEntry(std::string name, std::string address, std::list<PhoneNumber>& phone, int num)
: mName(name),mAddress(address),mPhones(phone),mNumTimeConsulted(num)
{
    
}

这种做法的结果和上面的赋值操作是相同,但是相率更高,赋值操作需要调用进入构造函数本体里面进行操作,刚好初始化模板就避免了这个问题

2.构造析构和赋值

每一个所写的类都有一个或者多个默认构造函数,析构函数,copy assignment操作符

为了避免编译器为我们自动生成一些不是期待的相关函数,应该直接定义相关函数,拒绝编译器自动生成相关的函数

不要在构造函数和析构函数调用virtual相关的函数

class Transaction
{
public:
    Transaction();
    virtual void logTransaction() const = 0;
};


class BuyTransaction : public Transaction
{
public:
    virtual void logTransaction() const;
};

class SellTransaction : public Transaction
{
public:
    virtual void logTransaction() const;
};

Transaction::Transaction()
{
    logTransaction();
}

BuyTransaction b; // 会发生什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值