gpt4 book ai didi

c++ - C++中为什么可以继承接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:11:00 26 4
gpt4 key购买 nike

我有一个要从 C++ 移植到 Java 的应用程序。有一段C++代码我觉得很奇怪。

typedef std::string ArgName;
typedef std::map< ArgName, AnyData > ArgumentMap;

class Arguments : public ArgumentMap
{
public:
// Very important note: When read finds a numeric/set argument,
// it sets anyData.kind to Int. But STILL, it fills anyData.dString,
// just in case. So if the ArgumentMap was built by Arguments::read,
// the dString fields are all filled.
bool read( int argc, char **argv );

// remains is filled with the arguments not starting with '-'.
bool read( int argc, char **argv, std::vector<const char*>& remains );

// const if fails, erases arg if succeeds.
bool getNumericParam( const ArgName& name, int& num );

// sw is true if the switch is present. The function
// returns false if the argument value is not empty.
bool getSwitch( const ArgName& name, bool& sw );

bool getSwitchConst( const ArgName& name, bool& sw ) const;

// Returns true if the switch is present. Throws an error message if
// if the argument value is not empty.
bool getSwitchCompact( const ArgName& name );

void checkEmptyArgs() const;

};

看起来在原始 C++ 中,作者正在使他们的 Arguments 类继承自 Map。这对我来说毫无意义。 Map 是一个接口(interface),这意味着您不能继承它,只能实现它。这是在 C++ 中可以完成而在 Java 中无法完成的事情吗?

此外,我不明白您为什么要使用 typedef。我从 Wikipedia 中读取了定义

typedef is a keyword in the C and C++ programming languages. The purpose of typedef is to form complex types from more-basic machine types[1] and assign simpler names to such combinations. They are most often used when a standard declaration is cumbersome, potentially confusing, or likely to vary from one implementation to another

但是我不明白为什么作者会在这里这样做。他们是不是想说他们想从类 AnyData 继承并且 ArgumentMap 应该有一个 Map 作为它的字段之一?

最佳答案

This makes no sense to me. Map is an interface

在 Java 中,它是。在 C++ 中,它甚至不是一个类,而是一个类模板。 C++ 没有类似于 Java 接口(interface)的概念,尽管您可以使用虚拟继承实现类似的东西。

就集合类而言,C++ 用模板和泛型编程解决了 Java 用接口(interface)和继承解决的问题。

C++ map 模板的实例是功能齐全的类,其工作方式类似于 Java 的 TreeMap。您可以像从 Java 中的类继承一样继承它们,并且由于多重继承,您不限于单个类。

Also, I don't understand why you would use a typedef.

您使用 typedef 为类赋予有意义的名称。除了缩短您的输入时间之外,它还使您的程序更具可读性,并为您稍后重新定义 typedef 背后的类提供了额外的灵 active 。

注意:您可以从标准容器继承的事实并不意味着您应该这样做。阅读 this question 的答案获取更多信息。

关于c++ - C++中为什么可以继承接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22445602/

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