๐ฉ ๊ธฐ์กด์ ์ ์ํด ๋์ ํด๋์ค์ ์ฌํ์ฉ์ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ง ๋ฌธ๋ฒ์ ์์
์ข์ ์ฝ๋๋ ์๊ตฌ์ฌํญ์ ๋ณ๊ฒฝ ๋ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐ์ ๋ฐ๋ฅธ ๋ณ๊ฒฝ์ด ์ต์ํ๋์ด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ํ ํด๊ฒฐ์ฑ ์ผ๋ก ์์์ด ์ฌ์ฉ๋๋ค.
class Person {
private:
int age;
char name[50];
public:
Person(int myAge, char * myName) : age(myAge){
}
void WhatYourName() const {
}
void HowOldAreYou() const {
}
}
class Student : public Person { // Person ํด๋์ค๋ฅผ public ์์ํจ
private:
char major[50];
public:
Student(char *myName, int myAge, char * myMajor) : Person(myAge, myName){
}
void WhoAreYou() const {
WhatYourName(); // Person ํด๋์ค์ ๋ฉค๋ฒ
HowOldAreYou();
}
}
๐ฉ ์์๋ฐ์ ํด๋์ค์ ์์ฑ์ ์ ์
์ด๋์ ๋ผ์ด์ ๋ฅผ ํตํด์ ํ์ ํด๋์ค๋ ์์ ํด๋์ค์ ์์ฑ์๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํด์ผ ํ๋ค.
ํ์ ํด๋์ค์ ์์ฑ์๋ ์์ ํด๋์ค์ ๋ฉค๋ฒ๋ฅผ ์ด๊ธฐํํ ์๋ฌด๋ฅผ ๊ฐ๋๋ค.
๋จ, ์์ ํด๋์ค์ ์์ฑ์๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํด์ ์ด๊ธฐํํด์ผ ํ๋ค.
Student(char *myName, int myAge, char * myMajor) : Person(myAge, myName) {
...
}
๋๋ฌธ์ ํ์ ํด๋์ค๋ ์์ ํด๋์ค์ ์์ฑ์ ํธ์ถ์ ์ํ ์ธ์๊น์ง ํจ๊ป ์ ๋ฌ๋ฐ์์ผ ํ๋ค.
private ๋ฉค๋ฒ๋ ํ์ ํด๋์ค์์๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก, ์์ฑ์์ ํธ์ถ์ ํตํด์ ์์ ํด๋์ค์ ๋ฉค๋ฒ๋ฅผ ์ด๊ธฐํํด์ผ ํ๋ค.
๐ฉ ํ์ ํด๋์ค์ ๊ฐ์ฒด ์์ฑ ๊ณผ์
๐ case1. Student student1(23,24);
1. ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ ๋น
2. ํ์ ํด๋์ค์ ์์ฑ์ ํธ์ถ
3. ์์ ํด๋์ค์ ์์ฑ์ ํธ์ถ ๋ฐ ์คํ
4. ํ์ ํด๋์ค์ ์์ฑ์ ์คํ
๐ case2. Student student2;
1. ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ ๋น
2. ํ์ ํด๋์ค์ void ์์ฑ์ ํธ์ถ
3. ์ด๋์ ๋ผ์ด์ ๋ฅผ ํตํ ์์ ํด๋์ค์ ์์ฑ์ ํธ์ถ์ด ๋ช ์์ ์ผ๋ก ์ ์๋์ด ์์ง ์์ผ๋ฏ๋ก, void ์์ฑ์ ํธ์ถ
4. ํ์ ํด๋์ค ์คํ
๐ฉ ํ์ ํด๋์ค ๊ฐ์ฒด ์๋ฉธ๊ณผ์
ํ์ ํด๋์ค์ ์๋ฉธ์๊ฐ ์คํ๋ ์ดํ์ ์์ ํด๋์ค์ ์๋ฉธ์๊ฐ ์คํ๋๋ค.
์คํ์ ์์ฑ๋ ๊ฐ์ฒด์ ์๋ฉธ์์๋ ์์ฑ์์์ ๋ฐ๋์ด๋ค.
์์ ํด๋์ค์ ๋ฉค๋ฒ ๋์์ ๋์ ํ ๋น์ ์์ ํด๋์ค์ ์์ฑ์๋ฅผ ํตํด์, ์๋ฉธ ์ญ์ ์์ ํด๋์ค์ ์๋ฉธ์๋ฅผ ํตํด์ ์ด๋ฃจ์ด์ง๋ค.
class Person {
private:
char * name;
public:
Person(char * myName) {
name = new char[strlen(myName) + 1];
}
~Person(){
delete []name;
}
}
class Student : public Person {
private:
char * major;
public:
Student(char * myName, char *myMajor) : Person(myName) {
major = new char[strlen(myMajor) + 1];
}
~Student() {
delete []major;
}
}
๐ฉ ์ธ ๊ฐ์ง ํํ์ ์์
1. public ์์
์ ๊ทผ ์ ์ด ๊ถํ์ ๊ทธ๋๋ก ์์ํ๋ค. ๋จ, private์ ์ ๊ทผ๋ถ๊ฐ๋ก ์์ํ๋ค.
2. protected ์์
private๋ณด๋ค ์ ๊ทผ์ ๋ฒ์๊ฐ ๋์ ๋ฉค๋ฒ๋ protected๋ก ์์ํ๋ค. ๋จ, private์ ์ ๊ทผ๋ถ๊ฐ๋ก ์์ํ๋ค.
๐ ์์์์ public, protected ์๋ ์ ๊ทผ์ ์ด์๊ฐ protected๊ฐ ๋๋ค.
3. private ์์
private๋ณด๋ค ์ ๊ทผ์ ๋ฒ์๊ฐ ๋์ ๋ฉค๋ฒ๋ protected๋ก ์์ํ๋ค. ๋จ, private์ ์ ๊ทผ๋ถ๊ฐ๋ก ์์ํ๋ค.
๐ ์์์์ public, protected ์๋ ์ ๊ทผ์ ์ด์๊ฐ private๊ฐ ๋๋ค.
๐ฉ ์์ ์กฐ๊ฑด
๐ is-a ๊ด๊ณ์ ์ฑ๋ฆฝ
์ ํ๊ธฐ ๐ ๋ฌด์ ์ ํ๊ธฐ ๐ ๋ฌด์ ์ ํ๊ธฐ๋ ์ผ์ข ์ ์ ํ๊ธฐ์ด๋ค. ๐ ๋ฌด์ ์ ํ๊ธฐ is a ์ ํ๊ธฐ
๋ฌด์ ์ ํ๊ธฐ๋ ์ ํ๊ธฐ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์๋ก์ด ํน์ฑ์ด ์ถ๊ฐ๋ ๊ฒ
์ด๋ ๋ฏ is-a ๊ด๊ณ๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ์์์ ๊ธฐ๋ฐ์ผ๋ก ํํํ๊ธฐ์ ๋งค์ฐ ์ ์ ํ๋ค.
๋ ธํธ๋ถ ์ปดํจํฐ๋ ์ปดํจํฐ์ด๋ค.
ํ๋ธ๋ฆฟ ์ปดํจํฐ๋ ๋ ธํธ๋ถ ์ปดํจํฐ์ด๋ค.
ํํ๋ฆฟ ์ปดํจํฐ๋ ์ปดํจํฐ์ด๋ค.
๐ has-a ๊ด๊ณ๋ก ์์์ ๊ตฌ์ฑํ๋ฉด
๊ฒฝ์ฐฐ์ ์ด์ ์์ ํ๋ค.
๊ฒฝ์ฐฐ has a ์ด
has a ๊ด๊ณ๋ ์์์ผ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ด๋ฌํ ๊ฒฝ์ฐ police์ gun์ ๊ฐํ ์ฐ๊ด์ฑ์ ๋ ๊ฒ ๋๋ค. ๋ฐ๋ผ์, ์ด์ ์์ ํ์ง ์์ ๊ฒฝ์ฐฐ์ด๋, ๋ค๋ฅธ ๋ฌด๊ธฐ๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐฐ์ ํํํ๊ธฐ๊ฐ ์ฝ์ง ์์์ง๋ค.
๐ has-a ๊ด๊ณ๋ ํฌํจ์ผ๋ก ํํํ๋ค.
class Gun {
private :
int bullet;
public :
...
}
class Police {
private:
int handcuffs;
Gun * pistol; // ์์ ํ๊ณ ์๋ ๊ถ์ด
}
has-a ๊ด๊ณ๋ฅผ ํฌํจ์ ํํ๋ก ํํํ๋ฉด, ๋ ํด๋์ค๊ฐ ์ฐ๊ด์ฑ์ ๋ฎ์์ง๋ฉฐ, ๋ณ๊ฒฝ ๋ฐ ํ์ฅ์ด ์ฉ์ดํด์ง๋ค.
์ฆ, ์ด์ ์์ ํ์ง ์์ ๊ฒฝ์ฐฐ์ ํํ์ด ์ฌ์์ง๊ณ , ์ถ๊ฐ๋ก ๋ฌด๊ธฐ๋ฅผ ์์ ํ๋ ํํ๋ก์ ํ์ฅ๋ ๊ฐ๋จํด์ง๋ค.
'๐ฉโ๐ป ํ๋ก๊ทธ๋๋ฐ > ๐ C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] ๊ฐ์์ ์๋ฆฌ์ ๋ค์ค์์ (0) | 2024.04.29 |
---|---|
[C++] ์์๊ณผ ๋คํ์ฑ | ๊ฐ์ํจ์(virtual function) | ์ฐธ์กฐ์ (1) | 2024.04.26 |
[C++] ๋ณต์ฌ ์์ฑ์ | ๊น์ ๋ณต์ฌ์ ์์ ๋ณต์ฌ (0) | 2024.04.19 |
[C++] ํด๋์ค์ ๋ฐฐ์ด, this ํฌ์ธํฐ (0) | 2024.04.18 |
[C++] ์์ฑ์์ ์๋ฉธ์ (0) | 2024.04.18 |