构造函数综合小练习1

知识点:1.匿名对象生命周期 2. 拷贝构造函数 3. 构造函数,析构函数的调用顺序

#include "iostream"
using namespace std;
class Triangle
{
public:
    Triangle(int a, int b, int c)
    {
        this->a_ = a;
        this->b_ = b;
        this->c_ = c;
        cout << "Triangle() construct  " << "a=" << this->a_ << ",  b=" << this->b_ << ",c=" << this->c_ << endl;
    }
    ~Triangle()
    {
        cout << "Triangle() deconstruct  " << "a=" << this->a_ << ",  b=" << this->b_ << ",c=" << this->c_ << endl;
    }
    int Get_a()
    {
        return this->a_;
    }
protected:
private:
    int a_;
    int b_;
    int c_;
};


class MyTriangle
{
public:
    MyTriangle() :tri1_(1, 2, 3), tri2_(4, 5, 6), m(100)
    {
        cout << "MyTriangle 构造函数" << endl;
    }
    ~MyTriangle()
    {
        cout << "MyTriangle析构函数" << endl;
    }
    MyTriangle(const MyTriangle & obj) :tri1_(7, 8, 9), tri2_(10, 11, 12), m(100)
    {
        cout << "MyTriangle拷贝构造函数" << endl;
    }

protected:

public:
    Triangle tri1_; //Triangle没有对应的无参构造函数,c++编译器不知道如何构造
    Triangle tri2_;
    const int m;

};

int DoWork(MyTriangle myTriangle)
{   
    cout <<"DoWork---成员变量a_数据是:"<< myTriangle.tri1_.Get_a() << endl;
    return 0;
}

void Test()
{
    MyTriangle triAngle;
    DoWork(triAngle);   
}

//没有组织接纳的匿名对象
int AnonymousObj()
{
    cout<<"AnonymousObjTest begin"<<endl;
    Triangle(400, 500, 600); //匿名对象的生命周期,这种情况下没有被接收,产生即会消亡。
    cout << "AnonymousObjTest end" << endl;;
    return 0;
}
//有组织接收的匿名对象
int AnonymousObjAccepted()
{
    cout << "AnonymousObjTest begin" << endl;   
    Triangle tri = Triangle(100, 200, 300);//匿名对象直接提升为tri,不会调用拷贝构造函数
    cout << "AnonymousObjTest end" << endl;;
    return 0;
}
int main()
{
    Test(); 
    AnonymousObj();
    AnonymousObjAccepted();
    cin.get();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值