ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c运算符重载的多态性

2019-10-08 00:06:18  阅读:210  来源: 互联网

标签:c operator-overloading polymorphism abstract-class


如何使纯虚函数成为operator();功能.
在基类中这样做
int operator()= 0;
编译器给出错误.
在derive类operator()函数中
编译器说派生类无法制作.因为下面的课是抽象的
我知道我不能创建抽象类的对象,但现在我尝试创建派生类对象.

这是代码

#include <iostream>
using namespace std;
class ana {
    protected :
    int x;

    public :
    virtual int operator+()=0;
    virtual void operator=(ana&)=0;
    };

class baba : public ana{
    public:
    baba(int k){x=k;}
    int   operator+(baba &ali){
        int k;
        k=x+ali.x;
        return k;
    }
   void operator=(baba &ali){
       x=ali.x;
       }


    };

int main(){
    baba k(4);

    return 0;
    }

解决方法:

你模糊的代码提到基本上是不可能的.回答你的问题“如何使纯虚函数成为一个运算符();函数”,这绝对没有秘密,例如考虑以下琐碎的计划:

#include <iostream>

class base {
public:
  virtual int operator+(int) const = 0;
};

class deriv: public base {
public:
  int operator+(int) const {return 23;}
};

int main() {
  deriv d;
  base& b = d;
  std::cout << b + 15 << std::endl;
  return 0;
}

这编译并运行得很好,并按预期发出23.无论你做错了什么,显然它必须与此不同(并且可能与将操作符重载为纯虚拟的特定问题无关).

编辑:(根据评论,将const添加到方法中以防万一你想要用const基础调用它& – 注意其他答案也省略了这个const;并且,每个注释也是如此):

如果你想能够做到15 b,只需为此目的添加一个独立的功能,比如在main之前:

inline int operator+(int i, const base&b) {
    return b + i;
}

标签:c,operator-overloading,polymorphism,abstract-class
来源: https://codeday.me/bug/20191007/1869647.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有