我已经重载了“+”运算符,所以当我制作 class1 + class1 = class2 时。唯一的问题是当我将它传递给另一个对象时。
“+”运算符已经重载,因此当您创建 class2 + class1 时,它会将 class1 对象添加到 class2 对象。
这是示例:
#include<iostream.h>
class Figura {
public:
int x, y, poz;
int tip; //1 = punct ; 2 = dreapta; 3 = dreptunghi
Figura() { };
Figura(const Figura&) { };
};
class Grup {
private:
int nr_elemente;
Figura **figuri;
public:
int i;
Grup(int nr_el) {
nr_elemente = nr_el;
figuri = new Figura*[nr_elemente];
i = 0;
}
Grup() {
nr_elemente = 100;
figuri = new Figura*[nr_elemente];
i = 0;
}
~Grup() { /*delete[] figuri;*/ };
Grup(const Grup&) { };
Grup& operator=(const Grup&) {
return *this;
}
int _nr_elemente() {
return i;
}
void afiseaza_elemente() {
for(int j = 0; j < i; j++)
cout<<"Figura nr:"<<j<<" tip :"<<figuri[j]->tip<<" x:"<<figuri[j]->x<<" y:"<<figuri[j]->y<<" poz:"<<figuri[j]->poz<<endl;
}
friend Grup operator+(const Figura& fig1, const Figura& fig2) {
Grup grt;
grt + fig1;
grt + fig2;
cout<<grt.i<<endl; // current number of elements begining with 0, so it should print 1 (fig1 and fig2)
grt.afiseaza_elemente(); // prints the elements attributes
return grt;
};
friend Grup operator+(const Grup& gr1, const Grup& gr2) {};
void operator+(const Figura& fig);
};
void Grup::operator+(const Figura& fig) {
Grup::figuri[Grup::i] = new Figura;
Grup::figuri[Grup::i]->tip = fig.tip;
Grup::figuri[Grup::i]->poz = fig.poz;
if(fig.tip == 2) {
Grup::figuri[Grup::i]->x = fig.x;
Grup::figuri[Grup::i]->y = 0;
} else if(fig.tip == 3) {
Grup::figuri[Grup::i]->x = fig.x;
Grup::figuri[Grup::i]->y = fig.y;
}
else {
Grup::figuri[Grup::i]->x = 0;
Grup::figuri[Grup::i]->y = 0;
}
Grup::i++;
}
class Punct : public Figura
{
public:
Punct(int poz) {
Punct::tip = 1;
Punct::poz = poz;
}
};
class Segment : public Figura
{
public:
Segment(int poz, int x) {
Segment::tip = 2;
Segment::poz = poz;
Segment::x = x;
}
};
class Dreptunghi : public Figura
{
public:
Dreptunghi(int poz, int x, int y) {
Dreptunghi::tip = 3;
Dreptunghi::poz = poz;
Dreptunghi::x = x;
Dreptunghi::y = y;
}
};
void main(void) {
Grup gr(10);
Punct pct(1);
Segment sgm(3, 5);
gr + pct;
gr + sgm;
Grup gr2 = pct + sgm;
cout<<"--------------------------"<<endl;
cout<<gr2.i<<endl; // prints a weird number
gr2.afiseaza_elemente(); // prints the elemenets atributes, but because gr2.i is negative shows nothing
}