ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] ⭐️복사 생성자가 호출되는 경우
    C++/class 2022. 7. 1. 00:46

     

    복사 생성자가 호출되는 경우

     

    1. 기존의 객체 내용을 복사해서 새로운 객체를 만드는 경우

    2. 객체를 함수의 매개 변수로 전달하는 경우

    3. 객체를 값으로 반환하는 경우

     


    객체를 함수의 매개 변수로 전달하는 경우

    #include <iostream>
    #include <string>
    using namespace std;
    
    //1. 클래스 생성
    class Student {
    private:
        char* name;
        int id;
    public:
        //얕은 복사 생성자
        Student(const char *n, int i){
            name = new char[strlen(n)+1];
            strcpy(name, n);
            id = i;
        }
        //깊은 복사 생성자
        Student(Student &s){
            name = new char[strlen(s.name)+1];
            strcpy(name, s.name);
            id = s.id;
        }
        ~Student(){delete name;}
        
        char *getName(){
            return name;
        }
        int getId(){
            return id;
        }
        
        void setName(char *pn){
            name = pn;
        }
        
        void setId(int i){
            id = i;
        }
        
    };
    
    void print(Student obj){
        cout << "이름: " << obj.getName() << endl;
        cout << "학번: " << obj.getId() << endl;
    }
    
    // 2. 객체 생성
    int main(){
        
        Student s1("김연수", 120147);
        print(s1);
        
        
        return 0;
    }

     

    void print(Student obj){   //전역 함수

        cout << "이름: " << obj.getName() << endl;

        cout << "학번: " << obj.getId() << endl;

     

        Student s1("김연수", 120147);

        print(s1);


    객체를 값으로 반환하는 경우

    #include <iostream>
    #include <string>
    using namespace std;
    
    //1. 클래스 생성
    class Student {
    private:
        char* name;
        int id;
    public:
        //얕은 복사 생성자
        Student(const char *n, int i){
            name = new char[strlen(n)+1];
            strcpy(name, n);
            id = i;
        }
        //깊은 복사 생성자
        Student(Student &s){
            name = new char[strlen(s.name)+1];
            strcpy(name, s.name);
            id = s.id;
        }
        ~Student(){delete name;}
        
        char *getName(){
            return name;
        }
        int getId(){
            return id;
        }
        
        void setName(char *pn){
            name = pn;
        }
        
        void setId(int i){
            id = i;
        }
    
        void print(){
            cout << "이름은: " << name << "학번은: " <<id << endl;
        }
    };
    
    Student modify(Student obj){
        obj.setId(obj.getId() + 1);
        return obj;
    }
    
    
    // 2. 객체 생성
    int main(){
        
        Student s1("김연수", 120147);
        Student s2 = modify(s1);
        
        s1.print();
        s2.print();
        
        
        return 0;
    }

     

    Student modify(Student obj){

        obj.setId(obj.getId() + 1);

        return obj;

    }

     

        Student s1("김연수", 120147);

        Student s2 = modify(s1);

        

        s1.print();

        s2.print();

        

     

Designed by Tistory.