一个输出运算符与递增运算符重载的问题
#include <iostream>
#include <string>
using namespace std;
class Person
{
private:
string name;
int age;
public:
Person(string str, int age)
{
this->name = str;
this->age = age;
}
Person &operator++()
{
this->age++;
return *this;
}
Person operator++(int)
{
Person temp = *this;
this->age++;
return temp;
}
friend ostream &operator<<(ostream &cout, Person &person);
};
ostream &operator<<(ostream &cout, Person &person)
{
cout << "name: " << person.name << " age: " << person.age;
return cout;
}
int main()
{
Person p1 = {"zhang", 14};
Person p2 = {"wang", 23};
cout << ++p1 << endl;
cout << p1 << endl;
cout << "-----------" << endl;
cout << p2++ << endl; //报错,没有匹配操作符
cout << p2 << endl;
cin.get();
return 0;
}
为什么cout<<p2++<<endl;的时候报错,提示没有匹配操作符 std::ostream << Person
问题是我已经重载了<<,cout<<++p1<<endl;就不会报错
#include <string>
using namespace std;
class Person
{
private:
string name;
int age;
public:
Person(string str, int age)
{
this->name = str;
this->age = age;
}
Person &operator++()
{
this->age++;
return *this;
}
Person operator++(int)
{
Person temp = *this;
this->age++;
return temp;
}
friend ostream &operator<<(ostream &cout, Person &person);
};
ostream &operator<<(ostream &cout, Person &person)
{
cout << "name: " << person.name << " age: " << person.age;
return cout;
}
int main()
{
Person p1 = {"zhang", 14};
Person p2 = {"wang", 23};
cout << ++p1 << endl;
cout << p1 << endl;
cout << "-----------" << endl;
cout << p2++ << endl; //报错,没有匹配操作符
cout << p2 << endl;
cin.get();
return 0;
}
为什么cout<<p2++<<endl;的时候报错,提示没有匹配操作符 std::ostream << Person
问题是我已经重载了<<,cout<<++p1<<endl;就不会报错
...全文
相关推荐
C++运算符重载详解[代码]
本文详细介绍了C++中运算符重载的概念和实现方法。主要内容包括:1.加号运算符重载,通过成员函数和全局函数两种方式实现自定义数据类型的相加运算;2.左移运算符重载,只能通过全局函数实现自定义数据类型的输出;3.递增运算符重载,区分前置和后置递增的实现方式;4.赋值运算符重载,解决深浅拷贝问题;5.关系运算符重载,实现自定义类型的比较操作;6.函数调用运算符重载,创建仿函数。文章还总结了何时使用全局函数或成员函数进行运算符重载,并提供了完整的代码示例。
<C++>详解运算符重载之前置递增和后置递增
不走心的努力,都是在敷衍自己。书接上文,今天的内容是运算符重载里的递增运算符重载;递增和递减原理是一样的,这里就只分享递增的重载;提到递增递减,我们都知道又前置和后置两种方法, 那今天就详解一下前置递增和后置递增的细节,拿捏递增运算符重载! 形如"a++"、"++a"。如果a初始值为1,那么"a++"结果为1,但是实际上a等于2,先读取再加1;"++a"结果为2,实际也是2。这是对于基本运算类型,那么递增运算符重载的目的就是对于对象的属性也可以直接进行前置递增和后置......
c++课件PPT课件.pptx
c++课件PPT课件.pptx
C++_经典题目雇员问题
有关string 类的运算符重载,C++_经典题目雇员问题
C++练习题(附答案).pdf
.


新手乐园
