영넌 개발로그

[C++ 기초] class overloading / 헤더파일 만들어 쓰기 / access control (public, private) 본문

코딩/C++

[C++ 기초] class overloading / 헤더파일 만들어 쓰기 / access control (public, private)

영넌 2020. 10. 27. 02:20
#include <iostream>
#include <string>

using namespace std;

class PrintData
{
public:
	void myprint(int i) {
		cout << "int: " << i << endl;
	}
	void myprint(double d) {
		cout << "double: " << d << endl;
	}
	void myprint(string s) {
		cout << "string: " << s << endl;
	}
};

int main() {
	PrintData pd;

	pd.myprint(3);
	pd.myprint("Hello World");
	pd.myprint(3.52);
	return 0;
}

 

class function prototype(==declertaion)

- function decleration선언과 definition정의(==implementation)를 구별

- class 내부에는 declaration (prototype)만 지정

- class 외부에 function definition 

- 왜??

    인터페이스와 구현을 분리하여 코드 생산성을 높인다.

    소스 코드를 감출 수 있음

    헤더만 가져와서 사용할 때 보기에 좋음

 

#include <iostream>
#include <string>

using namespace std;

class PrintData
{
public:
	void myprint(int i);
};

void PrintData::myprint(int i) {
	cout << "int: " << i << endl;
}	

//PrintData 클래스 안에 있는 함수다 .

int main() {

	PrintData pd;

	pd.myprint(3);
	return 0;
}

 

 

위의 두개를 이용한 실제 메인 파일>

외부파일을 가져와 쓰는 것

 

 

 

private

class 구현하는 코드에서만 사용 가능

안써도 기본은 private

class 밖에서 건들 수 없음 (값을 바꿀 수 없음)

class 밖에서 변수를 건들고자하면 에러남

class 안의 변수이름과 밖에 변수이름이 같아도 다른 변수임

#include <iostream>
#include <string>

using namespace std;

class PrintData
{
private:
	int a;			//class member variable
	double b;		//class member variable
public:
	PrintData(int _a, double _b);
	void myprint();
};

PrintData::PrintData(int _a = 10, double _b = 45.0) : a(_a), b(_b) {

}
void PrintData::myprint() {
	cout << "int: " << a << endl;
	cout << "double: " << b << endl;
}

int main() {
	PrintData pd;
	//pd.a = 100;		<- 불가능
	//pd.b = 200.459;	<- 불가능
	pd.myprint();
	return 0;
}

 

 

 

#include <iostream>
#include <string>

using namespace std;

class Grade
{
private:
	int cprog;		//0~100
	int math;		//0~100

public:
	int show_cprog() {
		return cprog;
	}
	int show_math() {
		return math;
	}
	
	//데이터 유효성 체크
	void assing_cprog_score(int s) {
		if ((s < 0) || (s > 100)) {
			cprog = 0;
		}
		else {
			cprog = s;
		}
	}
	void assing_math_score(int s) {
		if ((s < 0) || (s > 100)) {
			math = 0;
		}
		else {
			math = s;
		}
	}
};


int main() {
	Grade g;

	g.assing_cprog_score(-45);
	g.assing_math_score(20);
	return 0;
}

 

Comments