728x90
#include <iostream>
#include <stdio.h>
class Product{
private:
int P_Data;
public:
Product() = default; // 기본생성자 보장
Product(const Product& input); //복사 생성자
void setData(int data);
int getData();
}
Product::Product(const Product& input)
{
printf("복사생성자입니다\n");
P_Data = input;
}
void Product::setData(int data)
{
P_Data = data;
}
int Product::getData()
{
return P_Data;
}
int main(){
Product p1{}; //기본 생성자 호출
p1.setData(100);
Product p2 = p1; // Product p2 (p1); 도 가능
printf("%d\n", p2.getData());
}
간단한 추가 설명을 하자면, 일단 복사 생성자도 생성자의 일종이기 때문에 복사 생성자를 호출을 한 후 기본 생성자를 호출을 하려고 하면 에러가 뜰 것이다.
그 점을 보완해주기 위해서 기본 생성자 = default 라는 값을 넣어서 main에서 기본 생성자도 호출을 할 수 있게 한다.
#include <iostream>
#include <stdio.h>
class Product2{
private:
int* P2_Data;
public:
Product2() = default; // 기본생성자 보장
Product2(const Product&) = delete; //얕은 복사 제한
void init(int* data);
void printData();
}
void Product2::init(int* data)
{
P2_Data = data;
}
void Product2::printData()
{
printf("%d\n",*P2_Data);
}
int main(){
int nData{};
Product2 p1{};
nData = 100;
c1.init(&nData);
//Product2 p2 = p1; 은 얕은 복사 제한 때문에 에러 처리 남. Product2 p2 (p1)도 동일
Product2 p2{};
p2 = p1;
p2.printData();
}
'c++' 카테고리의 다른 글
C++ 동적 할당 (0) | 2024.01.17 |
---|---|
Call by value 와 Call by reference (0) | 2024.01.15 |
c++ 생성자(constructor) (1) | 2024.01.10 |