c*****o 发帖数: 178 | 1 这里操作符是通常作为function member的操作符,比如+=
class sum//The base class
{
public:
sum(void);
virtual sum& operator+=(const sum&);
virtual void print_result();
virtual ~sum(void);
};
class sum_int ://The derived class
public sum
{
public:
sum_int(void);
sum_int(const int&);
virtual sum_int& operator+=(const sum_int&);
virtual void print_result();
virtual ~sum_int(void);
private:
int value;
};
int main()//The main function
{
int test[] = {1,2,3};
sum_int A( |
X****r 发帖数: 3557 | 2 sum& operator+=(const sum&);和
sum_int& operator+=(const sum_int&)是两个不同的函数,
后者没有override(中文是什么?)前者,而是重载(overload)了同一个操作符。
【在 c*****o 的大作中提到】 : 这里操作符是通常作为function member的操作符,比如+= : class sum//The base class : { : public: : sum(void); : virtual sum& operator+=(const sum&); : virtual void print_result(); : virtual ~sum(void); : }; : class sum_int ://The derived class
|
c*****o 发帖数: 178 | 3 那就是说,因为derived class 中的 +=的rhs肯定是和base class中的rhs类型不同,
所以不能是virtual function?
【在 X****r 的大作中提到】 : sum& operator+=(const sum&);和 : sum_int& operator+=(const sum_int&)是两个不同的函数, : 后者没有override(中文是什么?)前者,而是重载(overload)了同一个操作符。
|
X****r 发帖数: 3557 | 4 1.没有规定derived class 中的 +=的rhs肯定是和base class中的rhs类型不同,
你要愿意写得一样也没有错误,取决于你要达到什么目的了。
2.当然可以是virtual function。你的例子里不就是virtual function吗,
只不过你写了两个不同的virtual function而已。
你可以参考一下double dispatch。
【在 c*****o 的大作中提到】 : 那就是说,因为derived class 中的 +=的rhs肯定是和base class中的rhs类型不同, : 所以不能是virtual function?
|
c*****o 发帖数: 178 | 5 恩,看了一下double dispatch,明白该怎么做了,非常感谢!大牛~
【在 X****r 的大作中提到】 : 1.没有规定derived class 中的 +=的rhs肯定是和base class中的rhs类型不同, : 你要愿意写得一样也没有错误,取决于你要达到什么目的了。 : 2.当然可以是virtual function。你的例子里不就是virtual function吗, : 只不过你写了两个不同的virtual function而已。 : 你可以参考一下double dispatch。
|