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();