编程语言
首页 > 编程语言> > C++翁恺学习12-对象组合

C++翁恺学习12-对象组合

作者:互联网

继承是软件重用的一种方式。

组合也是软件重用的一种方式。

reusing the implementation

composition

 

example

class Person{...};
class Currency{...};
class SavingAccount{
public:
    SavingAccount(const char* name,const char* address,int cents);
    ~ SavingAccount();
    void print();
private:
    Person m_svaer; // 两个其他类的对象,不是指针,是fully类型的组合
    Currency m_balance;
};

SavingAccount::SavingAccount(const char* name,const char* address,int cents):m_saver(name,address),m_balance(0,cents){}
void SavingAccount::print(){
    m_saver.print();
    m_balance.print();
}

SavingAccount对象里面有两个其他类的对象。意味着,创建SavingAccount类的对象需要初始化SavingAccount,其他两个对象有自己的构造函数。

那这两个对象怎么初始化?

        自己初始化自己。 列表初始化的形式:m_saver(name,address),m_balance(0,cents)。构造函数之前进行执行,如果不这么做,这两个类需要有默认构造函数,并且需要做 默认构造+赋值。

    m_saver.print();
    m_balance.print();       
// 不破坏对象边界,独立

SavingAccount::SavingAccount(const char* name, // 构造函数
    const char* address,int cents):m_saver(name,address),m_balance(0,cents){}
void SavingAccount::print(){
    m_saver.print();
    m_balance.print();
}

embedded objects

 如果类里面有成员变量是对象,那么用列表初始化,不能放到构造函数中。

question

public vs. private

标签:12,const,name,cents,saver,SavingAccount,C++,print,翁恺
来源: https://blog.csdn.net/hymn1993/article/details/122788363