Использование перегрузки операторов в C ++ - PullRequest
1 голос
/ 15 ноября 2010
class A
{
public:
    ostream& operator<<(int  string)
    {
        cout << "In Overloaded function1\n";
        cout << string << endl;
    }
};

main()
{
    int temp1 = 5;
    char str = 'c';
    float p= 2.22;
    A a;
    (a<<temp1);
    (a<<str);
    (a<<p);
    (a<<"value of p=" << 5);
}

Я хочу, чтобы результат был: значение p = 5

Что нужно изменить, это сделать ... и функция должна принимать все типы данных, которые передаются

1 Ответ

6 голосов
/ 15 ноября 2010

Есть 2 решения.

Первое решение - создать шаблон.

            template <typename T>
            ostream& operator<<(const T& input) const
            {
                    cout << "In Overloaded function1\n";
                    return (cout << input << endl);
             }

Однако это приведет к печати a << str и a << p c и 2.22, что отличается от вашего исходного кода. что вывод 99 и 2.

Второе решение - просто добавить перегруженную функцию для const char*:

            ostream& operator<<(int  string)
            {
                    cout << "In Overloaded function1\n";
                    return (cout << string << endl);
             }

            ostream& operator<<(const char*  string)
            {
                    cout << "In Overloaded function1\n";
                    return (cout << string << endl);
             }

Это позволяет строкам C и всему, что можно преобразовать в int, редактировать A <<, но это все - он не будет "принимать все передаваемые типы данных".


Кстати, вы забыли return ostream.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...