gpt4 book ai didi

c++ - 为什么继承会影响异常处理?

转载 作者:可可西里 更新时间:2023-11-01 18:17:59 25 4
gpt4 key购买 nike

在寻找 this query 的答案时通过编写测试代码,我了解到私有(private)/ protected 继承改变了从各种类接收异常的方式,这非常令人惊讶。为了找到我之前提到的论坛问题的答案,我遇到了 this similar question .

对我来说,使用 protected 继承基类和 virtual 方法是很明显的。撇开标准不谈,我想知道为什么在 C++ 中异常处理在虚方法调用不是时受继承限制?以下片段对此进行了解释:

struct Base { virtual void printError () = 0; };
class Derived : protected Base { void printError () { } };

int main ()
{
try {
throw new Derived;
}
catch(Base *p) { p->printError(); } // Ideal; but not invoked
catch(void *p) { ((Base*)p)->printError(); } // Ugly; but only way to invoke
}

编辑:如果我们将隐私视为答案;公认。但为什么它只适用于 catch() 接收基指针,而不适用于接收基指针的函数?

最佳答案

privateprotected 继承的含义是类或类层次结构之外的任何人都无法知道继承。这与类(class)以外的人无法知道私有(private)成员的方式相同。
通过派生类的基类来捕获派生类向捕获者表明派生类实际上是从基类派生的,这违反了继承的隐私。

关于c++ - 为什么继承会影响异常处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5603897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com