일반적으로 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)를 프로그램 내에서 구현할 수 있도록 해주며, 객체 지향 프로그래밍은 다음과 같은 특징 때문에 소스 코드를 간결하고 생산성 높게 만들 수 있다.
멤버 변수를 속성(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";
}
};
C++에서는 클래스를 활용해 만든 변수를 인스턴스라고 하며 실제 프로그램 상 동작하도록 한다. 하나의 클래스에서 여러 개의 서로 다른 인스턴스를 생성할 수 있다.
Student a = Student("Jarvis", 100);
접근 한정자의 대표적인 두 종류
명칭 | 설명 |
---|---|
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";
}
};
기본적으로 하나의 클래스에서 생성된 인스턴스는 서로 독립된 메모리 영역에 멤버 변수를 저장하고 관리한다. 다만 멤버 함수는 모든 인스턴스가 공유한다는 점에서 함수 내에서 인스턴스를 구분할 필요가 있다. 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";
}
};