Mit*_*tch 1 c++ polymorphism inheritance
得到以下简单的结构:
class Base {
public:
virtual void foo() { std::cout << "Base" << std::endl; }
};
class Derived1 : public Base {
public:
void foo() override { std::cout << "Derived1" << std::endl; }
void boo() {}
};
class Derived2 : public Base {
public:
void foo() override { std::cout << "Derived2" << std::endl; }
};
int main(){
Base* p1 = new Derived1();
Base* p2 = new Derived2();
p1->foo();
p1->boo();
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:当我不希望 Derived2 的对象可以访问它时,如何访问 Derived1::boo() 函数(使用指针 p1,所以我仍然具有多态性)?
如果您可以确定指针指向一个Derived1对象,那么static_cast它:
static_cast<Derived1*>(p1)->boo();
Run Code Online (Sandbox Code Playgroud)
如果你不知道它是否指向一个Derived1对象,那么你需要先用 a 测试它dynamic_cast:
if (auto* as_derived1 = dynamic_cast<Derived1*>(p1)) {
as_derived1->boo();
}
Run Code Online (Sandbox Code Playgroud)
dynamic_cast将评估为nullptr您正在投射的指针是否实际指向 a Derived1。static_cast不执行此检查,使其更快。但是,如果您正在转换的指针实际上并不指向一个Derived1对象,那么访问结果指针会导致未定义的行为。
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |