同じクラスの2つの変数を追加する方法については複数の例がありますが、異なるクラスの変数をオーバーロードで追加する方法の例は見つかりません。演算子のオーバーロード+ C++
私の問題に関連するテンプレートはまだ使用していませんが、私たちはそれを使用することはできません。
私はクラスの人に+演算子を追加したいと考えています。 ex。 Person p;本b; p + b; // p.addBook(b)のような関数を使っていた場合と同じように本を追加します。
class Person
{
private:
B * b;
string sName;
int numOfBook;
int maxNumOfBooks;
maxNumOfBooks人が "" に
public:
Person();
Person(const Person&);
~Person();
const Person operator = (const Person &)
void addBook(const Book &); //adds a book to a Person
Person operator+(Person);
Book getBook(){return b[numOfBook];}//returns index of book
};
Person::Person()
{
numOfBook = 0;
maxNumOfBooks = 10;
b = new B[maxNumOfBooks];
for(int x=0;x<maxNumOfBooks;x++)
{
セット名を運ぶために許可されていることを最大です。私はこれをオーバーロードした。
b[x] = "";
}
}
Person::Person(const Person& p)
{
numOfBook = p.numOfBook;
maxNumOfBooks = p.maxNumOfBooks;
b = new B[maxNumOfBooks];
for(int x=0;x<maxNumOfBooks;x++)
{
b[x] = p.b[x];
}
}
Person::~Person()
{
delete [] b;
}
void Person::addBook()
{
置き換え "" numOfBooks場合< maxNumOfBooks。
これをコードしました。
}
Person Person::operator+(Person obj)
{
ここで何をすべきかわからない。しかし、私はそれがこのようなものに見えなければならないと仮定しています。
Spell a;
++numOfBook;
a=this->getBook(numOfBook);
obj.addBook(a);
return *this;
}
const Person Person::operator = (const Person & obj)
{
delete [] b;
numOfBook = p.numOfBook;
maxNumOfBooks = p.maxNumOfBooks;
b = new B[maxNumOfBooks];
for(int x=0;x<maxNumOfBooks;x++)
{
b[x] = p.b[x];
}
return *this;
}
class Book
{
private:
string name;
int price;
public:
void setP();
int getP();
};
int main()
{
Person s;
Book bk("Story", 18);
s+bk;
私はPersonに本を追加したいと思いますが、addBook()関数も使用する必要があります。
}
あなたは値によって 'Person'オブジェクトを返しています。では、 'Person'オブジェクトの代入演算子とコピーコンストラクタはどこにありますか?これらの2つの関数は '演算子+'が正しく動作するために必須であり、あなたはそれらを書くことを完全に逃しました。 [3のルール](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)を参照してください。 – PaulMcKenzie
@PaulMcKenzie、私の質問に必要な場合は追加できます。それは私の元のコードです。 – ArcheAngel
'operator +'が正しく動作するためには今必要な機能を今すぐ追加することにしましたか?これらの機能は、元のポストにあってはならず、補足としてではありませんでした。 – PaulMcKenzie