这有意义吗?
它可能。
课程中的内容无关紧要我只想知道是否有任何课程可以做到这一点,如果有的话,你能给我举个例子吗?想象一下如果每个类都有一个名字和一个数字(string getName(), int getNumber()),当你使用cin时会发生什么?
代码假定>>
定义为获取字段的值,例如可以使用...
std::istream& operator>>(std::istream&, Class1& x)
{
return is >> x.name_ >> x.number_;
}
可悲的是,代码不检查转换是否成功(即输入可以按希望解析为字符串和数字。更好的代码是:
Class1 c1, c2;
if (cin >> c1 >> c2)
if(c1.getName() == c2.getName())
cout << c1 + c2 << endl;
假设您输入“hello 20 goodbye 30”-> 您最终将c1
's 字段分别设置为“hello”和 20,并且明显c2
设置为“goodbye”和 30。
当你使用 c1 的 cout 时?
如果您使用 stream c1
,则输出由您创建的运算符确定。一个简单的实现是:
std::ostream& operator<<(std::ostream& os, const Class1& c)
{
return os << c.name_ << ' ' << c.number_;
}
c1+c2 是什么意思?谢谢,我希望你能帮助我!
这意味着匹配函数告诉它的任何含义,例如 - 您可能喜欢:
Class1 operator+(const Class1& lhs, const Class1& rhs)
{
return Class1(lhs.name_ + rhs.name_, lhs.number_ + rhs.number_);
}
或者,您可能想要连接数字,以便number_
7 和 23 组成 723……在您的程序上下文中任何有意义的东西。
编辑:哦,顺便说一句,在 Java 中我们使用 c1.getName().equals(c2.getName()) 来比较字符串,在 C++ 中需要吗?
通常我们创建一个比较函数,以便我们可以使用==
:
bool operator==(const Class1& lhs, const Class1& rhs)
{
return lhs.name_ == rhs.name_ && lhs.number_ == rhs.number_;
}
当然,你可以做一些事情,比如忽略大小写差异,认为“Anthony”和“Tony”是等价的等等。