对象类和子类的虚函数返回类型不同?

来源:百度知道 编辑:UC知道 时间:2024/07/12 17:00:14
抽象类IDate作界面
class IDate{
public:
virtual ~IDate(){}
virtual IDate& operator+(int n) = 0;
virtual IDate& operator+=(int n) = 0;
virtual IDate& operator++() = 0;
virtual void print(ostream& o)const=0;
};
IDate& createDate(int y, int m, int d);
IDate& createDate(int n);
IDate& createDate(const string s);
inline ostream& operator<<(
ostream& o, const IDate& d){
d.print(o); return o;
}
class Date:public IDate{
int year, month, day;
public:
Date(const string& s);
Date(int n=1);
Date(int y, int m, int d);
Date operator+(int n)const;
Date& operator+=(int n);
Date& operator++();
friend ostream& operator<<(
ostream& o, const Date& d
);
};
IDate类中纯虚函数有返回类型为IDate引用类型,而对应的函数在Date中有返回类型为Date对象的,也有返回为Date对象引用类型的。
不是要求“虚函数用于继承结构层次中的基类与子类。除了基类与子类的函数名必须相同外,连参数类型、个数和顺序都要相同。 ”么?为什么上面不同也可以?
我看的没提到虚函数可以用重载函

不一定啊 也可以说是重载此函数么

一般来说,函数返回值不能为类类型,否则会应函数内临时变量发生析构而导致引用的堆内存被释放从而导致错误。正确的返回值应该为对象的引用类型,尤其对于+的重载函数。