Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1744500
  • 博文数量: 263
  • 博客积分: 1218
  • 博客等级: 少尉
  • 技术积分: 2862
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-19 02:33
文章分类

全部博文(263)

文章存档

2020年(12)

2019年(2)

2018年(10)

2016年(1)

2015年(20)

2014年(115)

2013年(46)

2012年(37)

2011年(20)

分类: C/C++

2014-06-26 23:12:59


1,如果父类和子类的同名成员函数参数格式相同,返回值类型不同,父类的设置为虚函数,能否实现多态?
2,如果父类和子类的同名成员函数参数格式相同,父类返回值类型作为父类的对象指针或引用,子类返回值类型作为子类的对象指针或引用,父类的设置为虚函数,能否实现多态?
ps:题目中的“父类返回值类型作为父类的对象指针或引用,子类返回值类型作为子类的对象指针或引用”是神马意思?

1,如果父类和子类的同名成员函数参数格式相同,返回值类型不同,父类的设置为虚函数,能否实现多态?
答:如果返回值类型是基本数据类型,必须相同,不然编译不通过。
如果返回值类型是类类型,可以不相同。

2,如果父类和子类的同名成员函数参数格式相同,父类返回值类型作为父类的对象指针或引用,子类返回值类型作为子类的对象指针或引用,父类的设置为虚函数,能否实现多态?
答:可以实现多态,具体见我提供的程序。

ps:题目中的“父类返回值类型作为父类的对象指针或引用,子类返回值类型作为子类的对象指针或引用”是神马意思?
答:virtual B* print(A* a) 中的 B* 就是子类返回值类型。

  1. #include <iostream>
  2. using namespace std;

  3. class A {
  4. private:
  5.     int numA;
  6. public:
  7.     A(int n) :
  8.       numA(n) {
  9.       }
  10.     virtual A* print(A* a) {
  11.         cout << 'A' << endl;
  12.         return a;
  13.          }
  14. };

  15. class B: public A {
  16. private:
  17.     int numB;
  18. public:
  19.     B(int n) :
  20.        A(n), numB(n) {
  21.        }
  22. public:
  23.     virtual B* print(A* a) {
  24.         cout << 'B' << endl;
  25.         return (B*) a;
  26.         }
  27. };

  28. int main() {
  29.     A * a = new B(1000);
  30.     a->print(a);
  31.     A a1 = B(1000);
  32.     a1.print(a);

  33. }
转:



阅读(893) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~