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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象类和子类的虚函数返回类型不同?相关的知识,希望对你有一定的参考价值。

抽象类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对象引用类型的。
不是要求“虚函数用于继承结构层次中的基类与子类。除了基类与子类的函数名必须相同外,连参数类型、个数和顺序都要相同。 ”么?为什么上面不同也可以?
我看的没提到虚函数可以用重载函数代替啊?而且我写的那个要求是从 钱能的 C++程序设计教程(第二版)上摘录下来的,这个程序也是那里面的。

参考技术A 不一定啊 也可以说是重载此函数么 参考技术B 一般来说,函数返回值不能为类类型,否则会应函数内临时变量发生析构而导致引用的堆内存被释放从而导致错误。正确的返回值应该为对象的引用类型,尤其对于+的重载函数。

C++中父类和子类的成员函数同名同参数同返回只是父类里面是虚函数,子类没有虚函数限定 有问题吗

这样有什么问题吗?

没有问题,这就是虚函数的作用,子类中可以override(重写)父类中的虚函数,给出子类自己的实现方法,子类中其实省略了父类函数声明前的virtual,子类中加上virtual也是没有问题的,可有可无。 参考技术A 没问题啊,父类里面是虚函数,当调用时子类只会调用自己的函数,不会调用父类的,这就是重载吧 参考技术B 子类中的成员函数也是虚函数。 参考技术C 子类重写父类的方法默认就是虚继承。

以上是关于对象类和子类的虚函数返回类型不同?的主要内容,如果未能解决你的问题,请参考以下文章

C++的虚函数表

C++的虚函数表

delphi中覆盖override父类的静态方法和虚函数有啥不同?

C++子类如何调父类的虚函数

C++ 中,类的继承:父类当使用虚函数时候,子类对该函数进行重写的话,属于子类成员函数对虚函数的覆盖!

C++多态