#include <iostream>
class Super {
public:
int n1, n2;
};
class Sub : public Super {
public:
int n3, n4;
};
class Sub2 : public Sub {
public:
int n5, n6;
};
int main()
{
Super* sp;
Sub* sbp;
Sub2* sbp2;
Sub2 obj{};
sbp2 = dynamic_cast<Sub2*>(&obj);
sbp = dynamic_cast<Sub*>(sbp2);
sp = dynamic_cast<Super*>(sbp2);
return 0;
}
#include <iostream>
class Super {
public:
virtual void func() {
std::cout << "Super::func()" << std::endl;
}
void func1() {
std::cout << "Super::func1()" << std::endl;
}
void fx() {
std::cout << "Super::fx()" << std::endl;
}
};
class Sub : public Super {
public:
void func() {
std::cout << "Sub::func()" << std::endl;
}
void func2() {
std::cout << "Sub::func2()" << std::endl;
}
void fx() {
std::cout << "Sub::fx()" << std::endl;
}
};
int main()
{
Super* sp = new Super{};
sp->func();
sp->func1();
sp->fx();
std::cout << "+++++++++++++++++++++++Upcasting+++++++++++++++++++++++++" << std::endl;
Super* sp2 = new Sub{};
sp2->func();
sp2->func1();
sp2->fx();
std::cout << "+++++++++++++++++++++++Downcasting+++++++++++++++++++++++++" << std::endl;
Sub* sp3 = dynamic_cast<Sub*>(sp2);
sp3->func();
sp3->func1();
sp3->func2();
sp3->fx();
delete sp;
delete sp2;
return 0;
}