构造函数综合小练习1

来源:互联网 发布:linux进程查看命令 top 编辑:程序博客网 时间:2024/05/21 08:59

知识点: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;}
0 0
原创粉丝点击