KWJ*_*104 3 c++ operator-overloading
我刚刚开始学习基本的C++语法,我对我遇到的一段代码感到有些困惑.
对于一个名为MyString的类,有一个运算符重载定义为:
ostream& operator<<(ostream& os, const MyString& s)
{
os << s.data;
return os;
}
Run Code Online (Sandbox Code Playgroud)
然后在一些驱动函数中声明:
cout << s3 << endl;
Run Code Online (Sandbox Code Playgroud)
运行,其中s3是对象类型MyString.结果打印出s3的值.
我不太明白这个陈述是如何起作用的.在搞乱之后,似乎只需要调用一次复制构造函数,然后解构3个对象.这条线的确如何运作?看起来操作符接受对ostream和MyString的引用,但是它既不是endl也不是endl?另外,为什么在使用"<<"的两个实例时只调用一个复制构造函数呢?也许我甚至没有问正确的问题,或者我的问题甚至没有意义,因为我对这些问题的发生感到非常困惑.如果是这种情况,有人可以解释一下对正在发生的事情的一般性解释吗?
这是一个非常普遍的问题,但我会尽力消除你的误解.
当你说ostream& operator<<(ostream& os, const MyString& s) { ... },你只是定义一个函数,它将ostream&第一个参数和const Mystring&第二个参数作为第二个参数,并返回一个ostream&.函数碰巧被命名operator<<,可以通过简写语法x << y调用来调用operator<<(x, y).
当你这样做时cout << s3 << endl;,它与做同样的事情operator<<(operator<<(cout, s3), endl);.
MyString从此代码中调用复制构造函数和析构函数.您看到的消息来自其他地方.
| 归档时间: |
|
| 查看次数: |
1597 次 |
| 最近记录: |