关于基类指针返回值的重载,不能基于智能指针返回值重载o

本文探讨了C++中基于基类指针返回值重载的问题,指出使用智能指针进行重载可能存在的错误。内容包括错误示例,解释了基类向子类转换的常见错误,并讨论了正确的重载方式和返回类型的差异。文章强调,在实际代码中使用临时变量指针作为返回值是不合适的。
摘要由CSDN通过智能技术生成
class C {
   
 public:
  virtual C f1() {
    return C(); }
  virtual C* f2() {
   
    cout << 1 << endl;
    return new C();
  }
};

class D : public C {
   
 public:
  virtual D f1() override {
    return D(); }
};

检查f1的重载是明显有问题的,如下。因为这玩意不是个指针。

返回类型与重写虚拟函数 “C::f1” 的返回类型 “C” 既不相同,也不协变C/C++(317)


class D : public C {
   
 public:
  virtual C* f2() override {
   
    cout << 2 << endl;
    return new C();
  }
  virtual D* f2() override {
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值