gpt4 book ai didi

java - 为什么 C++ 允许直接从子类中调用祖父类方法?

转载 作者:行者123 更新时间:2023-11-28 00:18:16 27 4
gpt4 key购买 nike

为什么 C++ 允许直接从子类中调用祖父类的方法。这不违反封装吗?像 Java 这样的语言不允许绕过父类方法意味着 super.super.method() 是不允许的。但它在 C++ 中有效。是什么原因?考虑以下代码。

#include <iostream>
class a1
{
public:
void fun()
{
std::cout<<"fun() in a1\n";
}
};

class a2 : public a1
{
public:
void fun()
{
std::cout<<"fun() in a2\n";
}
};

class a3 : public a2
{
public:
void fun() // Bypass call to a2 class' method
{
a1::fun();
std::cout<<"fun() in a3\n";
}
};

int main()
{
a3 a;
a.fun();
return 0;
}

最佳答案

你问:

Doesn't that violate encapsulation?

在一定程度上是这样。理想情况下,如果 a3 需要访问其祖先类的任何功能,它应该通过其直接基类,即父类。如果设计更改并且 a2 不再派生自 a1,则 a3::fun 中的代码将中断。

你问:

What is the reason?

很可能有一长串原因,太长而无法放入 SO 答案中。我怀疑主要原因是允许程序员灵活地做对他们有意义的事情。

关于java - 为什么 C++ 允许直接从子类中调用祖父类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903630/

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