2022. 5. 6. 12:19γC++
π‘ μ€λ²λ‘λ©, μ€λ²λΌμ΄λ©, κ°μ ν¨μ, κ°μ μλ©Έμ
μ€λ²λ‘λ©(overloading)κ³Ό μ€λ²λΌμ΄λ©(overriding), κ°μ ν¨μ, κ°μ μλ©Έμ
μ€λ²λΌμ΄λ© : μ£Όλ‘ μμμμ μ°μ΄λ©°, λμΌν ν¨μλͺ μ λν΄ μλ κΈ°λ₯μ 무μνκ³ μλ‘κ² μ¬μ μνλ κ².
μ€λ²λ‘λ© : λμΌν ν¨μλͺ μ κ°μ§ ν¨μλ₯Ό λ§€κ°λ³μλ₯Ό λ¬λ¦¬ ν΄ μ¬λ¬κ°λ‘ μ μνλ κ².
μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ©μ ν·κ°λ¦¬κΈ° μ½λ€. νλ‘ μ 리ν΄λ³΄μ
μ€λ²λ‘λ©(overloading) | μ€λ²λΌμ΄λ©(overriding) | |
---|---|---|
λ§€κ°λ³μ | λ³κ²½ | λ³κ²½ X ν¨μ μν μ μ§λ |
λμ κΈ°λ₯ | κΈ°λ₯ μ μ§ | κΈ°λ₯ λ³κ²½ λλ νμ₯ |
μ€λ²λ‘λ© μ ν¨μμ κΈ°λ₯μ λ³κ²½ν΄λ λμ§λ§, μ£Όλ‘ λμΌν κΈ°λ₯μ λ€μν μΈμλ₯Ό λ°μλ€μ¬ μ°κΈ° μν΄ μ¬μ©νλ κ²½μ°κ° λλΆλΆ.
λ©€λ² ν¨μ μ€λ²λΌμ΄λ©
μμμ ν΅ν΄ λ¬Όλ €λ°μ λ©€λ² ν¨μλ₯Ό μ€λ²λΌμ΄λ©μ ν΅ν΄ μ¬μ μν κ²μ΄λ€.
- μμ ν΄λμ€μμ μ§μ μ€λ²λΌμ΄λ©
- virtual ν¨μ(κ°μ ν¨μ)λ₯Ό μ΄μ©νμ¬ μ€λ²λΌμ΄λ©
1. μμ ν΄λμ€μμ μ§μ μ€λ²λΌμ΄λ©
#include <iostream>
class Person {
private:
std::string name;
public:
Person(std::string n) : name(n) {};
void printInfo() {
std::cout << "name : " << name << std::endl;
}
};
class Student: public Person {
private:
int stu_num;
public:
Student(std::string n, int sn) : Person(n), stu_num(sn) {};
void printInfo() {
Person::printInfo();
std::cout << "studnet number : " << stu_num << std::endl;
}
};
int main() {
Student sujilee("sujilee", 14);
sujilee.printInfo();
std::cout << std::endl;
sujilee.Person::printInfo();
}
Personμ μ μλ ν¨μ printInfo()μ λμΌν μνμ μ§λκ³ , κΈ°λ₯λΆλΆμ νλ²κΉμ§ μΆλ ₯νλλ‘ μ¬μ μ νμ.
//OUTPUT
name : sujilee
studnet number : 14
name : sujilee
2. virtual ν¨μλ₯Ό μ΄μ©ν μ€λ²λΌμ΄λ©
- virtual ν¨μλ₯Ό μ΄μν μ€λ²λΌμ΄λ©μ μΈμ νμν κΉ?
μμ μ½λμμ mainλ¬Έμ μ‘°κΈ λ°κΏλ³΄μ.
int main() {
Person *pointedPerson;
Person kchoi("kchoi");
Student sujilee("sujilee", 14);
pointedPerson = &kchoi;
pointedPerson->printInfo();
std::cout << std::endl;
pointedPerson = &sujilee;
pointedPerson->printInfo();
}
ν΄λμ€ ν¬μΈν° λ³μλ₯Ό μμ±νλ€. ν¬μΈν° λ³μμ Student ν΄λμ€μ κ°μ²΄λ₯Ό μ°Έμ‘°νκ² νλ©΄ Student ν΄λμ€μ μ€λ²λΌμ΄λ© λ printInfo()κ° μλλΌ Person ν΄λμ€μ printInfo()κ° νΈμΆλλ κ²μ μΆλ ₯κ²°κ³Όμμ νμΈν μ μλ€.
name : kchoi
name : sujilee
ν΄λμ€ ν¬μΈν° λ³μλ ν΄λΉ λ³μμ νμ μ ν΄λΉνλ ν΄λμ€μ λ©€λ²λ§ νΈμΆν μ μλ€.
μμ κ°μ κ²½μ°λ₯Ό ν΄κ²°νλ λ°©λ²μ΄ λ°λ‘ virtual ν¨μ (κ°μ ν¨μ)λ₯Ό μ΄μ©ν μ€λ²λΌμ΄λ©μ΄λ€.
#include <iostream>
class Person {
private:
std::string name;
public:
Person(std::string n) : name(n) {};
virtual void printInfo() {
std::cout << "name : " << name << std::endl;
}
};
class Student: public Person {
private:
int stu_num;
public:
Student(std::string n, int sn) : Person(n), stu_num(sn) {};
virtual void printInfo() {
Person::printInfo();
std::cout << "studnet number : " << stu_num << std::endl;
}
};
int main() {
Person *pointedPerson;
Person kchoi("kchoi");
Student sujilee("sujilee", 14);
pointedPerson = &kchoi;
pointedPerson->printInfo();
std::cout << std::endl;
pointedPerson = &sujilee;
pointedPerson->printInfo();
}
ν¨μ νμ
μ virtual
ν€μλλ₯Ό λΆμ¬μ£Όμλ€.
name : kchoi
name : sujilee
studnet number : 14
virtaulμ μ΄μ©νμ¬ ν¨μλ₯Ό κ°μ ν¨μλ‘ μ μΈνλ©΄, ν¬μΈν° λ³μμ νμ (25λ²μ§Έμ€μ Person)μ΄ μλ ν¬μΈν°κ° μ€μ λ‘ λ΄κ³ μλ κ°μ²΄(34λ²μ§Έμ€μ sujilee)μ μ£Όμμ λ°λΌ νΈμΆνλ λμμ λ°κΏ μ μλ€.
κ°μν¨μμ κ΄λ ¨ν΄ μμμΌν λμ λ°μΈλ©(dynamic binding)κ³Ό κ°μ μλ©Έμ(virtual destrucor)μ λν΄μλ λ€μ κ²μλ¬Όμμ λ€λ£¨λλ‘ νκ² λ€.
'C++' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Cpp - μμΈμ²λ¦¬ (Exception Handling), try, throw, catch (0) | 2022.05.14 |
---|---|
Cpp - μΆμ ν΄λμ€ (0) | 2022.05.07 |
Cpp - λ°μΈλ©, λμ λ°μΈλ©, κ°μ μλ©Έμ (0) | 2022.05.06 |
cpp - μμ, λ€μ€ μμ (0) | 2022.05.04 |
Cpp - μμ±μ, μλ©Έμ, μ°Έμ‘°λ³μ, μ€λ²λ‘λ© (0) | 2022.05.04 |