C++笔记——构造函数与析构函数

/*构造函数:声明类的对象时,该类的构造函数会自动被调用
 *作用:构造函数是用于初始化类的成员变量
 *
 *类的初始化列表:作用也是为了初始化类的成员,它是在类的构造函数调用之前就将类的相关成员变量初始化
 *
 *
 *析构函数:在类对象被销毁时,自动调用,调用顺序与构造函数相反
 *作用:做善后清理工作
*/
class Person
{
public:
    Person();
    Person(const string &name, const string &sex, int age);
    ~Person();
private:
    string m_name;
    string m_sex;
    int m_age;
};


Person::Person()
{
    cout << "Person()" << endl;
    m_name = "Person";
    m_sex = "man";
    m_age = 18;
}

Person::Person(const string &name, const string &sex, int age)
    :m_name(name),m_sex(sex),m_age(age)//类成员变量初始化的顺序以成员变量在类中声明的顺序为准,与在初始化列表中的顺序无关
{
    cout << "Person(...)" << endl;
}

Person::~Person()
{
    cout << "~Person()" << endl;
}

类的引用、常量成员只能用类的初始化列表来初始化

class Person
{
public:
    Person(const string &name, const string &sex, int age, const int &var);
    ~Person();
    void print();
private:
    string m_name;
    string m_sex;
    int m_age;
    int &m_age2;//引用成员
    int &m_age3;//引用成员
    const int m_number;//常量成员
    const int &m_age4;//const引用成员
};

Person::Person(const string &name, const string &sex, int age, const int &var)
    :m_name(name),m_sex(sex),m_age(age),m_age2(m_age),m_age3(age),m_number(1),m_age4(var)
{
    cout << "Person(...)" << endl;
}

Person::~Person()
{
    cout << "~Person()" << endl;
}

void Person::print()
{
    cout << "name:" << m_name
         << " sex:" << m_sex
         << " age:" << m_age
         << " age2:" << m_age2
         << " age3:" << m_age3
         << " number:" << m_number
         << " age4:" << m_age4 << endl;
    cout << "age  address:" << &m_age << endl;
    cout << "age2 address:" << &m_age2 << endl;
    cout << "age3 address:" << &m_age3 << endl;
    cout << "age4 address:" << &m_age4 << endl;
}


int main(int argc, char *argv[])
{
    int t_age = 20;
    Person p("AS","man",t_age,t_age);
    p.print();
    cout << "t_age address:" << &t_age << endl;
    return 0;
}

类的成员变量可以是该类的指针、引用、其它类的对象(类的组合)

class Game//游戏类
{
public:
    Game():m_name(""),m_level(0)
    {
        cout << "Game()" << endl;
    }

    Game(const string &name, int level)
        :m_name(name),m_level(level)
    {
        cout << "Game(...)" << endl;
    }

    ~Game()
    {
        cout << "~Game()" << endl;
    }

private:
    string m_name;
    int m_level;
};

class Person
{
public:
    Person();
    ~Person();
private:
    Person *m_p;
    Person &m_person;

    Game m_game;
};

Person::Person()
    :m_p(0),m_person(*this),m_game("LOL",0)
{
    cout << "Person()" << endl;
}

Person::~Person()
{
    cout << "~Person()" << endl;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值