Moo*_*igo 0 c++ inheritance g++
我正在经历从Java到C++的过渡,我正在尝试编写一个简单的程序.
有一个超类,Animal具有以下接口:
class Animal
{
public:
Animal(int a, std::string n);
bool operator==(Animal a);
private:
int age;
std::string name;
};
Run Code Online (Sandbox Code Playgroud)
它的子类Dog:
class Dog : public Animal
{
public:
Dog(int a, std::string n, double w);
bool operator==(Dog d);
private:
double weight;
};
Run Code Online (Sandbox Code Playgroud)
我的问题是关于狗的operator==方法,比较2只狗.
动物operator==在下面.
bool Animal::operator==(Animal a) //overriding of operator ==
{
return (age==a.age) && (name==a.name);
}
Run Code Online (Sandbox Code Playgroud)
现在我想用Animal的方法编写Dog的版本.
就像我用Java做的那样:
boolean equals(Dog d){
return (super.equals(d)) && (this.name==d.name);
}
Run Code Online (Sandbox Code Playgroud)
我需要的是c ++相当于(super.equals(d)).如果它是一个具有普通名称的方法,那将很容易(Animal :: equals(d)),但我不知道如何为operator ==执行此操作,它具有不同的语法.
这实际上非常简单:
return Animal::operator==(d) && name==d.name;
Run Code Online (Sandbox Code Playgroud)
使用超类的名称而不是super在C++中你可以有多个超类的原因,所以你必须清楚你想要哪一个.
或者,您可以通过使用它的过载来调用它:
return ((Animal&)*this)==d && name==d.name;
Run Code Online (Sandbox Code Playgroud)
由于operator==在这种情况下的参数将是a Animal&和a Dog&,因此它不能匹配Dog::operator==(Dog d),因此使用Animal::operator==(Animal a).
注意:您的签名非常不寻常.相反,使用以下之一:
bool operator==(const Animal& a) const;
friend bool operator==(const Animal& left, const Animal& right);
Run Code Online (Sandbox Code Playgroud)
这些不会在每次比较时制作动物的副本,并且可以比较const动物.
| 归档时间: |
|
| 查看次数: |
1563 次 |
| 最近记录: |