【发布时间】:2020-01-06 15:03:08
【问题描述】:
我对 C++(和 OOP)相当陌生。我正在努力理解以下代码:
#include <iostream>
class Base {
public:
Base() {
std::cout << "In Base Constr: " << __FUNCSIG__ << std::endl;
}
virtual ~Base() {
std::cout << "In Base Destr: " << __FUNCSIG__ << std::endl;
}
void A() {
std::cout << "In Base func A " << __FUNCSIG__ << std::endl;
}
};
class Derived : public Base {
public:
Derived() {
std::cout << "In Derived Constr: " << __FUNCSIG__ << std::endl;
}
~Derived() {
std::cout << "In Derived Destr: " << __FUNCSIG__ << std::endl;
}
void B() {
std::cout << "In Derived func B " << __FUNCSIG__ << std::endl;
}
};
void test(Base* b) {
Derived* d = static_cast<Derived*>(b);
d->A();
d->B(); // How is this valid??
}
int main() {
Base *b = new Derived();
std::cout << "In main" << std::endl;
b->A();
std::cout << __LINE__ << std::endl;
Base *bb = new Base();
std::cout << __LINE__ << std::endl;
test(bb);
delete b;
delete bb;
}
我不确定,d->B() 行为什么以及如何工作?即使指针被类型转换为派生类,但基类对象本身不应该在内存中具有该函数。
【问题讨论】:
-
@Gupta - 你在想
dynamic_cast这里 -
This question应该解释清楚了。
-
我一直不明白为什么 OOP 会变得多元化。
标签: c++ inheritance polymorphism downcast static-cast