C++ #02 클래스

underlier12·2020년 1월 31일
1

C++

목록 보기
2/19

02. 클래스

구조체와 클래스

일반적으로 C++의 클래스는 구조체보다 효과적인 문법이며 거의 흡사하지만 클래스에서는 내부적으로 함수 등을 포함할 수 있다. 또한 클래스는 상속(Inheritance) 등의 개념을 프로그래밍에서 그대로 이용할 수 있다는 점에서 객체 지향 프로그래밍을 가능토록 해주는 기본 단위이다.

구조체

#include <iostream>
#include <string>

using namespace std;

struct student {
	string name;
	int score;
};

int main(void) {
	struct student a;
	a.name = "Jarvis";
	a.score = 100;
	cout << a.name << " : " << a.score << "점\n";
	system("pause");
	return 0;
}

클래스

#include <iostream>
#include <string>

using namespace std;

class Student {
private:
	string name;
	int score;
public:
	Student(string n, int s) {
		name = n; 
		score = s;
	}
	void show() {
		cout << name << " : " << score << "점\n";
	}
};

int main(void) {
	Student a = Student("Jarvis", 100);
	a.show();
	system("pause");
	return 0;
}

객체 지향 프로그래밍의 특징

C++은 클래스를 이용해 '현실 세계의 사물'인 객체(Object)를 프로그램 내에서 구현할 수 있도록 해주며, 객체 지향 프로그래밍은 다음과 같은 특징 때문에 소스 코드를 간결하고 생산성 높게 만들 수 있다.

  1. 추상화(Abstract)
  2. 캡슐화(Encapsulation)
  3. 상속(Inheritance)
  4. 정보 은닉(Data Hiding)
  5. 다형성(Polymorphism)

Member

멤버 변수를 속성(Property)라고 부르며 멤버 함수를 메소드(Method)라고 칭한다.

class Student {
private:
	string name;
	int score;
public:
	Student(string n, int s) {
		name = n; 
		score = s;
	}
	void show() {
		cout << name << " : " << score << "점\n";
	}
};

Instance

C++에서는 클래스를 활용해 만든 변수를 인스턴스라고 하며 실제 프로그램 상 동작하도록 한다. 하나의 클래스에서 여러 개의 서로 다른 인스턴스를 생성할 수 있다.

Student a = Student("Jarvis", 100);

Access Modifier

접근 한정자의 대표적인 두 종류

명칭설명
public클래스, 멤버 등을 외부로 공개. 해당 객체를 사용하는 어떤 곳이든 접근 가능
private클래스, 멤버 등을 내부에서만 활용. 외부에서 해당 객체 접근 불가
class Student {
private: // 정보 은닉
	string name;
	int englishScore;
	int mathScore;
	int getSum() { return englishScore + mathScore; } 
public:
	Student(string n, int e, int m) {
		name = n; 
		englishScore = e;
		mathScore = m;
	}
	void show() {
		cout << name << " : [합계 " << getSum() << "점]\n";
	}
};

this 포인터

기본적으로 하나의 클래스에서 생성된 인스턴스는 서로 독립된 메모리 영역에 멤버 변수를 저장하고 관리한다. 다만 멤버 함수는 모든 인스턴스가 공유한다는 점에서 함수 내에서 인스턴스를 구분할 필요가 있다. C++의 this 포인터는 포인터 자료형으로 '상수'라는 점에서 값을 변경할 수 없다.

class Student {
private: // 정보 은닉
	string name;
	int englishScore;
	int mathScore;
	int getSum() { return englishScore + mathScore; } 
public:
	Student(string name, int englishScore, int mathScore) {
		this->name = name;
		this->englishScore = englishScore;
		this->mathScore = mathScore;
	}
	void show() {
		cout << name << " : [합계 " << getSum() << "점]\n";
	}
};
profile
logos and alogos

0개의 댓글