C++/class

[C++] ⭐️복사 생성자가 호출되는 경우

year.number 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();