gpt4 book ai didi

抽象类中的 C++ 运算符重载

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:35 26 4
gpt4 key购买 nike

假设我们有以下场景:

我们有一个基础抽象类 A .然后我们上课BC源自 A .我们还有课 D这是 std::vector<T> 的自定义实现- 它包含私有(private)属性(property) list类型 std::vector<T>以及一些使用它的自定义方法。

现在我的问题如下:我想重载 operator +在类里面A能够做到这一点:

    B* b = new B(); 
C* c = new C();
D mList = b+c; //the property *list* of mList would contain b an c

我已经尝试了所有方法,但似乎无法让它工作,而且我没有想法。甚至可以重写基本抽象类中的运算符,以便它应用于派生类吗?

编辑:

到目前为止,这是我尝试过的:

文件 A.h:

#pragma once
#include <string>
#include <iostream>
using namespace std;
class A
{

protected:
double price;
string name;
public:
A() :name(""){};
A(string n, double p){
price = p;
name = n;
};
~A(){};
virtual void calculate(double value) = 0;
virtual void print() const = 0;
};

文件 B.h:

#pragma once
#include "A.h"

class B : public A
{
private:
public:
B() :A(){};
B(string n, double p) :A(n,p){};
~B();

void calculate(double value)
{
price = price + value;
}

void print() const
{
cout << name << " says: " << " " << price;
}
};

文件 C.h:

#include "A.h"

class C : public A
{
private:
public:
C() :A(){};
C(string n, double p) : A(n,p){};
~C();

void calculate(double value)
{
price = price * value;
}

void print() const
{
cout << name << " says: " << " " << price;
}

};

文件 D.H:

#include <vector>
class D
{
private:
vector<A*> list;
public:
D(){}
~D()
{
int len = list.size();
for (int i = 0; i < len; i++)
{
delete list[i];
}
};
void push(A* item)
{
list.push_back(item);
}
A* pop()
{
A* last = list.back();
list.pop_back();
return last;
}

//I have tried overriding it here and in A.h
friend D D::operator+(A* first, A* second)
{
D temp;
temp.push(first);
temp.push(second);
return temp;
}
};

最佳答案

看起来您正在添加两个指针,因此 A::operator+() 甚至不会被调用。但是要回答你的问题,是的,运算符重载是可以继承的。甚至来自抽象基类。

class A
{
public:
virtual void test() = 0;
int operator+(const A &a) {return 42;}
};

class B : public A
{
void test() {};
};

class C : public A
{
void test() {};
};

int main()
{
B* b = new B();
C* c = new C();

cout << "result: " << *b + *c << endl;
return 0;
}

输出:

result: 42

关于抽象类中的 C++ 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23853761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com