【发布时间】:2020-04-04 17:06:24
【问题描述】:
见以下代码:
#include<iostream>
using namespace std;
class ex
{
int i;
public:
ex(int x){i=x;}
void operator-()
{
i=-i;
}
int geti(){return i;}
};
class derived:public ex
{
int j;
public:
derived(int x,int y):ex(x){j=y;}
void operator-()
{
j=-j;
}
int getj(){return j;}
};
int main()
{
derived ob(1,2);
-ob;
cout<<ob.geti();
cout<<"\n"<<ob.getj();
}
输出:
1
-2
Process returned 0 (0x0) execution time : 0.901 s
Press any key to continue.
我在基类和派生类中都定义了- 运算符,但-ob; 只调用派生类的运算符。那么如何也将i字段改为-i(调用基类中的操作符)。
我需要任何显式函数来实现这一点吗?
【问题讨论】:
-
static_cast<ex*>(this)->operator-();会这样做,但如果有人减去两个(对)ex对象的引用,那将不会很顺利。还要注意operator-不应该返回void,而是一个否定的copy。推荐阅读:stackoverflow.com/questions/4421706/…
标签: c++ class inheritance operator-overloading operators