По поводу использования friend и операций
От: spring  
Дата: 17.10.05 20:15
Оценка:
Всем доброго времени суток!
Не подскажите, как можно правильно сделать что-то типо:
struct A
{
  A a_;
  friend A operator*(B b1, B b2) { return A(b1)*A(b2); };
};
Re: По поводу использования операций
От: spring  
Дата: 17.10.05 22:30
Оценка:
Немного подумал, и надумал вот что:

А возможно ли вообще в C++ переопределить оператор * так (с разными типами):
A operator*(B, B);


Подскажите плз. а то совсем голова не варит
Re[2]: По поводу использования операций
От: Aznog Россия  
Дата: 17.10.05 23:04
Оценка:
Здравствуйте, 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;
}
Re[3]: По поводу использования операций
От: Lexey Россия  
Дата: 18.10.05 17:11
Оценка:
Здравствуйте, 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>>
"Будь достоин победы" (c) 8th Wizard's rule.
Первый вопрос снимается
От: Lexey Россия  
Дата: 19.10.05 09:14
Оценка:
Здравствуйте, Lexey, Вы писали:

L>1) Зачем тут friend, если operator * не использует непубличный интерфейс A?


Опс, не заметил, что конструктор приватный.

L>2) Зачем писать operator * в классе A, когда он реально является глобальной внешней функцией?


Это остается.
... << RSDN@Home 1.1.4 stable rev. 510>>
"Будь достоин победы" (c) 8th Wizard's rule.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.