2012-04-15 2 views
1

У меня есть небольшая проблема, когда мой оператор < < не вызывается правильно.Виртуальный << оператор

Это то, что у меня есть:

class SomeInterface 
{ 
    friend std::ostream& operator<<(std::ostream& str, const SomeInterface& data); 

    protected: 
     virtual void print(ostream& str) const = 0; 
}; 

inline std::ostream& operator<< (std::ostream& o, SomeInterface const& b) 
{ 
    b.print(o); 
    return o; 
} 
} 

телефонный код выглядит примерно так:

SomeInterface* one = new someConcrete(); 
cout << one; 

< < перегруженная функция Я надеялся, что дозвонились на интерфейсе нет, не говоря уже о диспетчеризации до производного класса.

ответ

3

Try:

cout << *one; 

Ваш код просит, чтобы распечатать указатель, в то время как ваш operator<< принимает const SomeInterface& ссылку.

+0

Спасибо ... Я должен был догадаться после того, как он печатает адрес как мусор. –

0

Вы вызываете std::ostream& operator<< (std::ostream& o, void*);, потому что тип one является указателем.

Try:

cout << *one; 

Это вызовет перегрузку, которая принимает (ссылка) реальный объект, а не сам указатель

Смежные вопросы