함수호출과 복사 생성자
CTest TestFun(){} //반환형식으로 호출때 복사생성자 불림
void TestFun( CTest param){} // 매개변수로 호출때 복사생성자를 불름
void _tmain ( int argc, _TCHAR * argv[])
{
CTest a;
TestFun(a);
}
1.함수형태로 클래스를 호출할 때 매개변수로 호출할 경우 함수의 실인수로 기술한 변수가 함수 호출 때문에 값이 변경될수 있기 때문에 함수의 매개변수 형식이 클래스 형식이면 무조건 상수형 참조로 선언해야 한다.
#include "stdafx.h"
#include<iostream>
using namespace std;
class CTest
{
public;
CTest(int nParam) : m_nData(nParam)
{
cout<<"CTest(int)"<<endl;
}
CTest(const CTest &rhs) : m_nData(rhs.m_nData)
{
cout<<"CTest(const CTest &)"<<endl;
}
//읽기 전용 메서드
int GetData() const {return m_nData;}
//멤버 변수에 쓰기를 시도하는 메서드
int SetData( int nParam){ m_nData = nParam; return m_nData;}
private:
int m_nData =0;
};
//매개변수가 CTest클래스 형식이므로 복사생성자 호출
void TestFun(const CTest & param ) // 무조건 상수형 참조로선언해야 호출때 변수값이 변하지 않는다
{
cout<<" TestFun()"<<endl;
param.GetData();
}
int _ tmain(int argc, _TCHAR *argv[])
{
cout<<"***************Begin***************"<<endl;
CTest a(10);
TestFun( a) ;
cout<< "a : "<<a.GetData()<<endl;
cout<<"**************E n d ************"<<두이;
return 0;
}
'c++' 카테고리의 다른 글
대입연산자 (0) | 2018.07.15 |
---|---|
깊음복사와 얕은 복사 (0) | 2018.07.15 |
복사생성자 (0) | 2018.07.15 |
가상함수 (0) | 2018.07.13 |
기본클래스와 파생클래스 (0) | 2018.07.13 |