- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我看过这个问题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/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!