gpt4 book ai didi

c++ - 子类非公开继承的虚函数会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 21:06:43 27 4
gpt4 key购买 nike

我看过这个问题http://www.careercup.com/question?id=384062

class Base {
public :
virtual void method () = 0;
private :
int n;
};

void Base::method() { n = 1;}

class D1 : Base {};

class D2 : public D1 {
int i;
void method() {i = 2;}
};

通过了vs2008和g++ 4.4.3的编译

以上代码是我的理解,如有错误请指正

S1> D1 继承了变量 Base::n 但它不能访问它。

S2> D1继承了函数Base::method,但在上面的实现中并没有调用/修改这个继承的函数。

S3> D2::method 不是 D1::method 的覆盖版本

最佳答案

S2 和 S3 错误。

D1 的方法可以调用它的 Base::method(),但其他代码不能,因为 D1 的 Base 部分是私有(private)的。

Base::method() 被 D2 覆盖。如果您以某种方式将 (new D2) 转换为 (Base*) 并调用 Base::method,i=2 代码将运行。

考虑到访问控制,如果你有指向Base*的指针,外部代码可以使用->method()因为它是公共(public)的,如果你有指向D2*的指针,->method()不能被调用因为它是私有(private)的,即使它是相同的对象和相同的方法。

此外,尽管您对 Base::method() 的 (n=1) 实现,它及其类仍然是抽象的。

关于c++ - 子类非公开继承的虚函数会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7035462/

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