class Parent{
virtual void speak() {
cout >> "hi, i am parent";
}
};
class ChildA : public Parent {
public:
virtual void speak() {
cout >> "hi, i am child";
}
};
class ChildB : public Parent {
// 아무것도 선언 안했을시에는 부모 것을 가져다 쓴다.
public:
};
int main() {
ChildA a;
ChildB b;
a.speak();
b.speak();
return 0;
}
// 출력 결과 >> hi, i am child
// hi, i am parent
// 순수 가상 함수
virtual void speak() = 0
순수 가상함수 예제코드 (에러 예제)
#include <iostream>
using namespace std;
class Base {
public:
// 순수 가상 함수 선언
virtual void test() = 0;
};
// 자식 클래스
class BaseChild : public Base {
};
int main(){
// 에러 발생
BaseChild a;
a.test();
return 0;
}
순수 가상 함수 예제코드 (성공예제)
#include <iostream>
using namespace std;
class Base {
public:
// 순수 가상 함수 선언
virtual void test() = 0;
};
// 자식 클래스
class BaseChild : public Base {
public:
// 순수 가상 함수 재정의
virtual void test(){
cout << "this is pure function";
}
};
int main(){
****BaseChild a;
a.test();
return 0;
}
#include <iostream>
class Parent {
public:
// 가상함수 선언
virtual void parentMethod() {
std::cout << "Parent Method" << std::endl;
}
};
class Child : public Parent {
public:
// 자식 함수 선언
void childMethod() {
std::cout << "Child Method" << std::endl;
}
};
int main() {
Child child;
// 업캐스팅
Parent* parentPtr = &child;
// 부모 포인터를 자식으로 캐스팅
Child* childPtr = dynamic_cast<Child*>(parentPtr);
if (childPtr) {
// 캐스팅 성공
childPtr->childMethod();
} else {
// 캐스팅 실패
std::cout << "Failed to cast to Child" << std::endl;
}
return 0;
}