c++

함수호출과 복사생성자

내동 2018. 7. 15. 18:42

함수호출과 복사 생성자

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