ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 복사 생성자
    C++/개념정리 2018. 12. 21. 13:58


    class SoSimple

    {

    private:

        int num1;

        int num2;

    public:

        

        SoSimple(int n1, int n2) 

            : num1(n1), num2(n2)

        {

             cout<<"생성자 호출"<<endl;

        }

        


        SoSimple(const SoSimple &copy) 

            : num1(copy.num1), num2(copy.num2)

        {

            cout<<"복사 생성자 호출"<<endl;

        }

        

        // explicit SoSimple(const SoSimple &copy)             // 키워드 explicit으로 묵시적 형 변환을 막을 수 있다.

        //     : num1(copy.num1), num2(copy.num2)

        // {

        //     cout<<"복사 생성자 호출"<<endl;

        // }


        void ShowSimpleData()

        {

            cout<<num1<<endl;

            cout<<num2<<endl;

        }

    };

    int main()

    {

        SoSimple sim1(15, 20);

        SoSimple sim2 = sim1;        // SoSimple sim2(sim1);  으로 묵시적 형 변환.  

        sim2.ShowSimpleData();

        return 0;

    }



    깊은 복사 생성자


    #include <stdio.h>

    #include <iostream>

    #include <cstring>

    using namespace std;


    class Person

    {

    private:

        char *name;

        int age;

        

    public:

        Person(char *myname, int myage)

        {

            int len = strlen(myname)+1;

            name=new char[len];

            strcpy(name, myname);

            age=myage;

        }

        

        Person(const Person &copy)

           : age(copy.age)

        {

            name = new char[strlen(copy.name)+1];

            strcpy(name, copy.name);

        }

        

        void ShowPersonInfo() const

        {

            cout<<"이름: "<<name<<endl;

            cout<<"나이: "<<age<<endl;

        }

        

        ~Person()

        {

            delete []name;

            cout<<"called destructor!"<<endl;

        }

    };


    int main()

    {

        Person man1("Lee dong wood", 29);

        Person man2=man1;

        man1.ShowPersonInfo();

        man2.ShowPersonInfo();

        return 0;

    }

    728x90

    'C++ > 개념정리' 카테고리의 다른 글

    this  (0) 2018.12.27
    friend  (0) 2018.12.21
    const  (0) 2018.12.21
    참조자(&)  (0) 2018.12.21
    #포인터 개념  (0) 2018.12.18

    댓글

Designed by Tistory.