-
[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();
'C++ > class' 카테고리의 다른 글
[C++] 객체 배열 (0) 2022.07.01 [C++] 객체의 동적 생성 (0) 2022.07.01 [C++] 객체 생성과 메세징하는 다양한 방법 (0) 2022.06.29 [C++] 생성자 안에서의 동적 메모리 할당 (0) 2022.06.28 [C++] 클래스에 대한 이해(Car.cpp) (0) 2022.06.24