c++ - 调用父类(super class)方法运算符==

标签 c++ inheritance g++

<分区>

我正在经历从 Java 到 C++ 的过渡,并且正在尝试编写一个简单的程序。

有一个父类(super class) Animal 具有以下接口(interface):

class Animal
{
public:
    Animal(int a, std::string n);

    bool operator==(Animal a);
private:
    int age;
    std::string name;
};

它是 Dog 的子类:

class Dog : public Animal
{
public:
    Dog(int a, std::string n, double w);

    bool operator==(Dog d);
private:
    double weight;

};

我的问题是关于 Dog 的 operator== 方法,它比较 2 只狗。

动物的 operator== 如下。

bool Animal::operator==(Animal a) //overriding of operator ==
{
return (age==a.age) && (name==a.name);
}

现在我想用动物的方法写狗的版本。

就像我在 Java 中做的那样:

boolean equals(Dog d){
    return (super.equals(d)) && (this.name==d.name); 
}

我需要的是 (super.equals(d)) 的 C++ 等价物。如果它是一个具有普通名称的方法,它会很容易(Animal::equals(d)),但我不知道如何为 operator== 做它,它具有不同的语法。

最佳答案

这实际上非常简单:

return Animal::operator==(d) && name==d.name;

使用父类(super class)名称而不是 super 的原因是在 C++ 中你可以有多个父类(super class),所以你必须清楚你想要哪个。

或者,您可以通过使用它的重载来调用它:

return ((Animal&)*this)==d && name==d.name;

由于 operator== 的参数在这种情况下将是 Animal&Dog&,因此它无法匹配 Dog::operator==(Dog d),因此使用 Animal::operator==(Animal a) 代替。

注意:您的签名非常不寻常。相反,使用其中之一:

bool operator==(const Animal& a) const;
friend bool operator==(const Animal& left, const Animal& right);

每次比较时,这些不会复制动物,并且可以比较 const 动物。

关于c++ - 调用父类(super class)方法运算符==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26166923/

相关文章:

wpf - 确定是否继承了 WPF DependencyProperty 值

javascript - ECMAScript/JavaScript - 继承和新运算符

c++ - 与 g++ 的链接选项

c++ - 或 C++ 中的语句

c++ - 登录 预处理号码

c++ - ideone 不显示任何输出

java - Hibernate继承的策略是什么

c++ - -std=c++11 在 g++ 命令行中的位置

c++ - 编辑和编译源代码,而无需将拷贝存储在磁盘存储器中

c++ - 解析具有 CR LF EOL 结构的 .csv 文件