2010-11-15 84 views
1
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使用操作符重载在C++

什么样的变化是应该做的......和功能应接受所传递的所有数据类型

+0

我想你正在寻找模板,但我不确定(我也是C++的新手)。 – dreamlax 2010-11-15 06:35:16

+0

@Matt:为什么它突然变成“功课”? – kennytm 2010-11-15 06:43:03

+0

主要返回类型是'int' – Chubsdad 2010-11-15 06:44:53

回答

6

有2个解决方案。

第一个解决方案是使其成为模板。

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

然而,这将使a << stra << p打印c2.22,这是从原始的代码不同。那输出992

第二个解决方案是简单地增加一个重载函数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字符串,一切都转换为intA <<“版,但仅此而已 - 它不会“照单全收数据传递的类型“。


顺便说一句,你忘了returnostream

+1

如果我看到'return input?',那么会有+ 1ed?一些'const'的正确性在这里也不正确? – Chubsdad 2010-11-15 06:38:40

+0

@Chubsdad:不,你应该返回一个'ostream',而不是'input'(见更新)。请解释“某些const'的正确性在这里也不正确?”。 – kennytm 2010-11-15 06:41:45

+0

早些时候,'我'猜想'返回'声明不在那里。现在很好。 Upvoted。请忽略我对const正确性的评论。不知何故,我习惯于将operator <<看作命名空间的朋友(或类似的)而不是成员函数。 – Chubsdad 2010-11-15 06:44:15