1,如果父类和子类的同名成员函数参数格式相同,返回值类型不同,父类的设置为虚函数,能否实现多态?
2,如果父类和子类的同名成员函数参数格式相同,父类返回值类型作为父类的对象指针或引用,子类返回值类型作为子类的对象指针或引用,父类的设置为虚函数,能否实现多态?
ps:题目中的“父类返回值类型作为父类的对象指针或引用,子类返回值类型作为子类的对象指针或引用”是神马意思?
1,如果父类和子类的同名成员函数参数格式相同,返回值类型不同,父类的设置为虚函数,能否实现多态?
答:如果返回值类型是基本数据类型,必须相同,不然编译不通过。
如果返回值类型是类类型,可以不相同。
2,如果父类和子类的同名成员函数参数格式相同,父类返回值类型作为父类的对象指针或引用,子类返回值类型作为子类的对象指针或引用,父类的设置为虚函数,能否实现多态?
答:可以实现多态,具体见我提供的程序。
ps:题目中的“父类返回值类型作为父类的对象指针或引用,子类返回值类型作为子类的对象指针或引用”是神马意思?
答:virtual B* print(A* a) 中的 B* 就是子类返回值类型。
-
#include <iostream>
-
using namespace std;
-
-
class A {
-
private:
-
int numA;
-
public:
-
A(int n) :
-
numA(n) {
-
}
-
virtual A* print(A* a) {
-
cout << 'A' << endl;
-
return a;
-
}
-
};
-
-
class B: public A {
-
private:
-
int numB;
-
public:
-
B(int n) :
-
A(n), numB(n) {
-
}
-
public:
-
virtual B* print(A* a) {
-
cout << 'B' << endl;
-
return (B*) a;
-
}
-
};
-
-
int main() {
-
A * a = new B(1000);
-
a->print(a);
-
A a1 = B(1000);
-
a1.print(a);
-
-
}
转:
阅读(893) | 评论(1) | 转发(0) |