π§ Study/C++ & C#
05. μμκ³Ό ν¬ν¨
GAMEMING
2024. 4. 11. 00:21
- μμκ³Ό ν¬ν¨
// - μμ (is a kind of, is a)
// λ§κ·Έλλ‘ λΆλͺ¨ ν΄λμ€μ λͺ¨λ λ©€λ²λ₯Ό λ¬Όλ € λ°μ κ² + μλ‘μ΄ λ©€λ²λ₯Ό μΆκ° κ°λ₯
// νμ ν΄λμ€
// class νμν΄λμ€ : public: λΆλͺ¨ν΄λμ€
// λ€μ€μμ μ‘΄μ¬
// : - μμμ λνλ
// ν¬ν¨ - ν΄λμ€ λ΄λΆμ μΈλΆ ν΄λμ€μ λ©€λ²κ° μλ μν© (has a)
class AAA{
public:
int a=10;
public:
output(){ };
}
class CCC{
public:
int c=30;
AAA p;
public:
output(){ cout<<p.a+b<<endl;;};
}
// μμ
class A {
public:
int a = 10;
public:
void output() { };
};
class B : public A {
public:
int b = 30;
public:
void output() { cout << a << ", " << b << endl;; };
};
class Vehicle {
int serial;
protected:
int speed;
public:
int price;
Vehicle(int s = 0) : serial(s), speed(0), price(0){}
void speedUp() { speed++; }
void speedDown() { speed--; }
void print()
{
cout << "[Vehicle] serial : " << serial << ", speed :" << speed << ", price : " << price << endl;
}
};
class Car : public Vehicle {
int gear;
public:
Car(int g = 0) : gear(g) {}
void pushAccel() { speed += 5; }
void pushBrake() { speedDown(); }
void setGear(int g) { gear = g; }
void printCarInfo(const char* msg) {
cout << msg << " speed :" << speed << ", price : " << price << ", gear : "<< gear << endl;
}
};
int main()
{
Car myCar(2), dreamCar(5);
myCar.pushAccel();
myCar.price = 3000;
dreamCar.price = 10000;
myCar.print();
dreamCar.print();
myCar.printCarInfo("[My Car]");
dreamCar.printCarInfo("[Dream Car]");
}
// λ©€λ²ν¨μ μ€ μμλμ§ μμ ν¨μ -> μμ±μ, 볡μ¬μμ±μ, λμ
μ°μ°μ, μλ©Έμ
λΆλͺ¨ ν΄λμ€μ μ κ·Ό μ§μ μ | private μμ | protected μμ | public μμ |
private | μμμμ μ§μ μ κ·Ό λΆκ° private λ©€λ²κ° λ¨ |
μμμμ μ§μ μ κ·Ό λΆκ° private λ©€λ²κ° λ¨ |
μμμμ μ§μ μ κ·Ό λΆκ° private λ©€λ²κ° λ¨ |
protected | μμμμ μ§μ μ κ·Ό κ°λ₯ private λ©€λ²κ° λ³ν¨ |
μμμμ μ§μ μ κ·Ό κ°λ₯ protected λ©€λ² |
μμμμ μ§μ μ κ·Ό κ°λ₯ protected λ©€λ² |
public | μμμμ μ§μ μ κ·Ό κ°λ₯ private λ©€λ²κ° λ³ν¨ |
μμμμ μ§μ μ κ·Ό κ°λ₯ protected λ©€λ²λ‘ λ³ν¨ |
μμμμ μ§μ μ κ·Ό κ°λ₯ public λ©€λ² |
- μ€λ²λΌμ΄λ©(overriding)
// μ€λ²λΌμ΄λ©
// λΆλͺ¨μκ² μ μλ λ©€λ²λ₯Ό μμ ν΄λμ€μμ μ¬μ μνλ κ²
// λ©€λ² λ³μμ μ¬μ μ X -> κ°μ²΄μ λμΌν μλ―Έμ λ³μκ° μ¬λ¬ κ° μκΈΈ μ μμ
class A {
public:
void overriding() { cout << "A ν΄λμ€μ over ν¨μ νΈμΆ!" << endl; }
};
class B : public A {
public:
void overriding() { cout << "B ν΄λμ€μ over ν¨μ νΈμΆ!" << endl; }
};
int main()
{
B b;
b.overriding();
return 0;
}
// μ€λ²λ‘λ©
// - μ€λ²λΌμ΄λ νκ³ μ νλ λ©μλκ° μμ ν΄λμ€μ μ‘΄μ¬
// - λ©μλ μ΄λ¦μ΄ κ°μμΌ ν¨
// - νΌλΌλ―Έν°μ μμ κ·Έ νΌλΌλ―Έν°μ μλ£νμ΄ κ°μμΌ ν¨
// - 리ν΄νλ κ°μμΌ ν¨
// - μμ λ©μλμ λμΌνκ±°λ λ΄μ©μ΄ μΆκ°λμ΄μΌ ν¨
class Base {
private:
string str;
public:
Base(const string& _str) { str = _str; }
void printStr() { cout << "κΈ°μ΄ν΄λμ€: " << str << endl; }
};
class Derived : public Base {
private:
int num;
public:
Derived(const string& _str, int _num) : Base(_str) { num = _num; }
void printStr() { cout << "νμν΄λμ€: " << num << endl; } // str λμ num μΆλ ₯νλλ‘ μ€λ²λΌμ΄λ©
};
int main() {
Base* ptr;
Base a("base class");
Derived b("derived class", 10);
ptr = &a;
ptr->printStr();
ptr = &b; // Derivedλ Baseλ₯Ό μμλ°κΈ° λλ¬Έμ is-a κ΄κ³. λ°λΌμ Base κ°μ²΄ ν¬μΈν°λ Derived κ°μ²΄λ₯Ό κ°λ¦¬ν¬ μ μμ
ptr->printStr(); // μ΄λ₯Ό μ
μΊμ€ν
(νμ ν΄λμ€μμ κΈ°λ° ν΄λμ€λ‘ μΊμ€ν
νλ κ²)μ΄λΌνλ€.
return 0;
}
// μμ ν΄λμ€μμ μ§μ μ€λ²λΌμ΄λ© ν λμ λ¬Έμ μ μ -> ν¬μΈν°
// ptrμ base ν΄λμ€ νμ
μ ν¬μΈν°λ‘ μ μλμ΄ μλ€.
// ptrμ΄ κ°λ¦¬ν€λ κ°μ²΄λ₯Ό λ³κ²½νλλΌλ μ»΄νμΌλ¬λ ν¬μΈν° ptrμ΄ κ°λ¦¬ν€λ λ³μμ νμ
κΈ°μ€μΌλ‘ ν¨μ νΈμΆ
// λ°λΌ μμμ΄ μλ λΆλͺ¨ ν΄λμ€κ° νΈμΆλ¨ -> viraual ν€μλ μ¬μ©
class Base {
private:
string str;
public:
Base(const string& _str) { str = _str; }
virtual void printStr() { cout << "κΈ°μ΄ν΄λμ€: " << str << endl; }
};
class Derived : public Base {
private:
int num;
public:
Derived(const string& _str, int _num) : Base(_str) { num = _num; }
virtual void printStr() override { cout << "νμν΄λμ€: " << num << endl; }
// κΈ°μ΄ ν΄λμ€μμλ§ virtual ν€μλλ₯Ό μ¬μ©ν΄λ λμ§λ§, μ΄μμ΄λ©΄ νμ ν΄λμ€μμλ
// virtual ν€μλλ₯Ό μ¬μ©ν΄μ ν΄λΉ ν¨μκ° κ°μν¨μμμ λͺ
ννκ² λλ¬λ΄λ νΈμ΄ μ’λ€.
// override ν€μλ λͺ
μν΄ μ€λ²λΌμ΄λ© ν¨μλΌλ κ²μ μλ―Έν μ μμ
};
int main() {
Base* ptr;
Base a("base class");
Derived b("derived class", 10);
ptr = &a;
ptr->printStr();
ptr = &b;
ptr->printStr();
return 0;
}
728x90