혼자서 이건가 아닌가 아리송 마리송!/#include <iostream>

C++_복습_접근제한자,TextGame,생성자,종료자

비비안개 2021. 8. 18. 05:50

1. 객체지향 프로그래밍 언어의 3대 특성
/// > 은닉성(캡슐화) : 코드에 대한 보안을 지키기위해 멤버의 접근여부를 판별함 
/// > 상속성
/// > 다형성 : 같은 타입의 객체가 각각 다른 결과를 가질 수 있는 속성

 

2. 접근제한자

C++의 기본 접근제한자는 private, 클래스 외부에서 접근이 불가능하다.

#include <iostream>
using namespace std;

class Student
{
public:
	enum Gender 
	{
		Man,Woman
	};

private:
	const char* name;	
	int age;
	Gender gender;

public: //메모리가 존재하지 않는 메서드로 값만 반환함
	//Getter / 접근자
	const char* GetName() //은닉성으로 나까지 접근 못할때 편법으로 뚫어줌, name의 메모리가 아닌 값만 반환됨
	{
		return name;
	}

	int GetAge()
	{
		return age;
	}

	//Setter / 설정자
	void SetStudentInfo(const char* name, int age, Gender gender)
	{
		this->name = name;
		this->age = age;	//this포인터는 자기자신
		this->gender = gender;
	}

	// 함수 뒤에 const : 해당 함수 내부에서 멤버에 대한 값 설정이 일어나지 않겠다.
	void PrintStudentInfo() const
	{
		cout << "이름 : " << name << endl;
		cout << "나이 : " << age << endl;
		cout << "성별 : " << ((gender == Gender::Man) ? "남자" : "여자") << endl;
	}
};

int main()
{
	Student* student = new Student();
	student->SetStudentInfo("김방방", 2, Student::Gender::Man);
	//student->PrintStudentInfo(); // 이름, 나이, 성별 전체 출력

	// 이름만 출력하고 싶은데 private이면 Getter를 이용해 메모리 없는 name값만 반환함
	cout << student->GetName() << endl;
	//cout << student->GetAge() << endl; //age도 age만 출력 가능


	delete student;
	student = nullptr;


	return 0;
}

 

3. TextGame

함수쓸 때 처음에는 void로 했다가 다 쓰고 맞는 반환 형식으로 고치기

 

void SetHp(int hp) { this->hp = hp; }

// SetHp에서는 멤버변수 hp를 this포인터로 매개변수 hp를 참조?한다.

int GetHp() { return hp; }

//GetHp에서는 hp값을 반환한다.

 

호출되서 출력되는 타이밍이 다르면 출력도 따로 만든다.

 

target->SetHp(target->GetHp() - damage);
targer->hp = target->hp - damage;	// 둘 다 같음

// target의 hp에 현재 target의 hp에서 damage를 뺀 값을 대입하겠다.

 

Enum::Type type; 은 Enum 안에 들어있는 Type이라는 구조체?이고 type은 변수?