Всем доброго времени суток!
Не подскажите, как можно правильно сделать что-то типо:
struct A
{
A a_;
friend A operator*(B b1, B b2) { return A(b1)*A(b2); };
};
Немного подумал, и надумал вот что:
А возможно ли вообще в C++ переопределить оператор * так (с разными типами):
A operator*(B, B);
Подскажите плз. а то совсем голова не варит
Здравствуйте, spring, Вы писали:
S>Немного подумал, и надумал вот что:
S>А возможно ли вообще в C++ переопределить оператор * так (с разными типами):
S>S>A operator*(B, B);
S>
S>Подскажите плз. а то совсем голова не варит
Можно.
class B
{
int data;
public:
B(int d): data(d) {}
B(): data(0) {}
int getData() const { return data; }
};
class A;
inline A operator * (const B& l, const B& r);
class A
{
int data;
A(int d): data(d) {}
public:
A(): data(0) {}
int getData() const { return data; }
friend A operator * (const B& l, const B& r)
{
return A(l.getData() * r.getData());
}
};
int main()
{
B b1(15), b2(15);
A a = b1 * b2;
std::cout << a.getData() << std::endl;
return 0;
}
Здравствуйте, Aznog, Вы писали:
A>A>class A
A>{
A>public:
A> friend A operator * (const B& l, const B& r)
A> {
A> return A(l.getData() * r.getData());
A> }
A>};
A>
1) Зачем тут friend, если operator * не использует непубличный интерфейс A?
2) Зачем писать operator * в классе A, когда он реально является глобальной внешней функцией?
... << RSDN@Home 1.1.4 stable rev. 510>>
Здравствуйте, Lexey, Вы писали:
L>1) Зачем тут friend, если operator * не использует непубличный интерфейс A?
Опс, не заметил, что конструктор приватный.
L>2) Зачем писать operator * в классе A, когда он реально является глобальной внешней функцией?
Это остается.
... << RSDN@Home 1.1.4 stable rev. 510>>