刚接触 c++ 和重载运算符,不确定如何使用该函数
Posted
技术标签:
【中文标题】刚接触 c++ 和重载运算符,不确定如何使用该函数【英文标题】:New to c++ and Overloading operators, unsure how to use the function 【发布时间】:2013-04-23 14:30:50 【问题描述】:您好,我是 C++ 的新手,在学习了一些 Java 基础知识后才开始学习它。
我有预先存在的代码,如果它重载了 >>
运算符,但是在看了很多教程并试图理解这个问题之后,我想我会在这里问。
合理的cpp文件:
#include "Rational.h"
#include <iostream>
Rational::Rational ()
Rational::Rational (int n, int d)
n_ = n;
d_ = d;
/**
* Creates a rational number equivalent to other
*/
Rational::Rational (const Rational& other)
n_ = other.n_;
d_ = other.d_;
/**
* Makes this equivalent to other
*/
Rational& Rational::operator= (const Rational& other)
n_ = other.n_;
d_ = other.d_;
return *this;
/**
* Insert r into or extract r from stream
*/
std::ostream& operator<< (std::ostream& out, const Rational& r)
return out << r.n_ << '/' << r.d_;
std::istream& operator>> (std::istream& in, Rational& r)
int n, d;
if (in >> n && in.peek() == '/' && in.ignore() && in >> d)
r = Rational(n, d);
return in;
Rational.h 文件:
#ifndef RATIONAL_H_
#define RATIONAL_H_
#include <iostream>
class Rational
public:
Rational ();
/**
* Creates a rational number with the given numerator and denominator
*/
Rational (int n = 0, int d = 1);
/**
* Creates a rational number equivalent to other
*/
Rational (const Rational& other);
/**
* Makes this equivalent to other
*/
Rational& operator= (const Rational& other);
/**
* Insert r into or extract r from stream
*/
friend std::ostream& operator<< (std::ostream &out, const Rational& r);
friend std::istream& operator>> (std::istream &in, Rational& r);
private:
int n_, d_;;
#endif
该函数来自一个名为 Rational 的预先存在的类,它接受两个 int
s 作为参数。这是重载>>
的函数:
std::istream& operator>> (std::istream& in, Rational& r)
int n, d;
if (in >> n && in.peek() == '/' && in.ignore() && in >> d)
r = Rational(n, d);
return in;
在看了一些教程之后,我正在尝试像这样使用它。 (我得到的错误是"Ambiguous overload for operator>>
in std::cin>>n1
:
int main ()
// create a Rational Object.
Rational n1();
cin >> n1;
就像我说的那样,我对整个重载运算符这件事很陌生,并且认为这里有人能够为我指出如何使用这个函数的正确方向。
【问题讨论】:
【参考方案1】:将Rational n1();
更改为Rational n1;
。您遇到了most vexing parse。 Rational n1();
不会实例化 Rational
对象,而是声明一个名为 n1
的 函数,它返回一个 Rational
对象。
【讨论】:
哇!如果它出现在我的代码中,我永远不会追踪它。 @NemanjaBoric,当然可以。它通常就像打开编译器警告一样简单。 好的,我这样做了,然后它说':Rational(int,int)''我认为它需要整数作为参数?但是这些参数是从用户输入中接收的。 @user2333446,我不知道为什么它不包含默认构造函数,但如果你不能更改类,我只会提供两个虚拟值。 @user2333446:正如克里斯所说,你能改变班级吗?如果没有,只需提供两个虚拟值。【参考方案2】:// create a Rational Object.
Rational n1();
this 不会创建新对象,而是声明一个不带参数并返回 Rational
的函数
你可能是说
// create a Rational Object.
Rational n1;
cin>>n1;
【讨论】:
以上是关于刚接触 c++ 和重载运算符,不确定如何使用该函数的主要内容,如果未能解决你的问题,请参考以下文章