返回值为类名的虚函数 覆盖

class A {
public:
 int numA;
public:
 A(int n):numA(n) {
 }
 virtual A* print(A* a) {
  cout << 'A' << endl;
  return a;
 }
};

class B: public A {
public:
 int numB;
public:

 B(int n):A(7), numB(n) {
 }
public:
 virtual B* print(A* a) {//如果返回值不是指针类型那么它一定要与基类放回类型相同。
  cout << 'B' << endl;
  return (B*)a;//如果这里要返回类型为B*  那么就要强转(B*)a      但是其实放回的是指向B类型的A指针可以继续做多态引用;
 }
};
int main() {
 A *a = new B(1000);
a->print(a)->print(a);//B B
 A a1 = B(1000);
 a1.print(a);//A

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值