일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 시스템
- 시그널
- 시스템 프로그래밍
- 하드링크
- 커널
- kernel
- radare2
- 워게임
- 시스템해킹
- multiplexing
- 프로그래밍
- 어셈블리어
- 알고리즘
- 시스템프로그래밍
- pwn.college
- 리눅스커널
- css
- write up
- Leviathan
- C++
- wargame
- 컴퓨터구조
- 리눅스 커널
- pwncollege
- C언어
- 리눅스
- Bandit
- 리버싱
- Pwnable.kr
- 포너블
- Today
- Total
Computer Security
#2 C++의 클래스 본문
구조체와 클래스의 차이점
-일반적으로 C++의 클래스(Class)는 구조체보다 더 효과적인 문법이다.
-구조체와 클래스는 거의 흡사하게 동작하지만, 클래스에서는 내부적으로 ‘함수’ 등을 포함할 수 있다.
-또한 클래스는 상속(Inheritance) 등의 개념을 프로그래밍에서 그대로 이용할 수 있다는 점에서 객체 지향 프로그래
밍(Object-Oriented Programming)을 가능하도록 해주는 기본적인 단위이다.
구조체와 클래스의 차이점: 구조체
코드 예시
#include <iostream>
#include <string>
using namespace std;
struct student {
string name;
int score;
};
int main(void) {
struct student a;
a.name = "고동산";
a.score = 100;
cout << a.name << " : " << a.score << "점\n";
system("pause");
}
결과 값
구조체와 클래스의 차이점: 클래스
코드 예시
#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("고동산", 100);
a.show();
system("pause");
}
결과 값
객체 지향 프로그래밍의 특징
C++은 클래스(Class)를 이용해 ‘현실 세계의 사물’인 객체(Object)를 프로그램 내에서 구현할 수 있도록 해주며,
객체 지향 프로그래밍은 다음과 같은 특징 때문에 소스코드를 보다 간결하고 생산성 높게 만들어 준다.
1) 추상화(Abstract)
2) 캡슐화(Encapsulation)
3) 상속성(Inheritance)
4) 정보 은닉(Data Hiding)
5) 다형성(Polymorphism)
C++의 클래스: 멤버(Member)
- 멤버 변수를 속성, 혹은 프로퍼티(Property)라고도 부른다.
- 멤버 함수를 메소드(Method)라고도 부른다.
ex)
class Student {
private:
string name;
int score;
public:
Student(string n, int s) { name = n; score = s; }
void show() { cout << name << " : " << score << "점\n"; }
};
C++의 클래스: 인스턴스(Instance)
- C++에서는 클래스를 활용해 만든 변수를 인스턴스(Instance)라고 한다.
-실제로 프로그램 상에서 객체가 살아서 동작하도록 해준다.
-하나의 클래스에서 여러 개의 서로 다른 인스턴스를 만들 수 있다.
ex)
int main(void) {
Student a = Student("고동산", 100);
a.show();
system("pause");
}
C++의 클래스: 접근 한정자
- public: 클래스, 멤버 등을 외부로 공개한다.
-해당 객체를 사용하는 어떤 곳에서도 접근할 수 있다.
- private: 클래스, 멤버 등을 내부에서만 활용한다. 외부에서 해당 객체에 접근할 수 없다.
클래스는 기본적으로 멤버를 private 형태로 간주한다.
반대로 구조체는 기본적으로 멤버를 public으로 간주한다.
따라서 클래스에서 ‘private:’ 부분을 제외하면 멤버는 자동으로 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++의 클래스: 접근 한정자
클래스 내부에서 정의된 멤버 함수를 불러올 때는 멤버 참조 연산자(.)를 사용하여 불러오게 된다.
코드 예시
int main(void) {
Student a = Student("양동균", 100, 98);
a.show();
cout << a.getSum(); // private 접근 한정자는 외부에서 접근할 수 없음. (오류 발생)
system("pause");
}
C++의 클래스: this 포인터
-기본적으로 하나의 클래스에서 생성된 인스턴스(Instance)는 서로 독립된 메모리 영역에 멤버 변수를 저장하고, 관
리한다.
-다만 멤버 함수는 모든 인스턴스가 공유한다는 점에서, 함수 내에서 인스턴스를 구분할 필요가 있다.
-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"; }
'프로그래밍 > C++' 카테고리의 다른 글
#6 C++ 프렌드 (0) | 2022.06.17 |
---|---|
#5 C++ 오버로딩 (0) | 2022.06.16 |
#4 C++ 클래스 상속 (0) | 2022.06.15 |
#3 C++ 생성자와 소멸자 (0) | 2022.06.14 |
#1 C언어와 C++비교하기 (0) | 2022.06.12 |