2 crazy642535606 crazy642535606 于 2016.09.22 18:49 提问

C++ operator+重载问题

分数类的加法里,我想做成 c = "1/3" + "2/3"的形式。

int main()
{
frac b(1,4), c;

c = "1/2" + "1/4";

cout << c; 

return 0;

}
fraction.h:

 __frac(int num = 0, int den = 1);//构造1
frac(char* s);//构造2
friend frac operator + (const frac &x, const frac &y);__//重载+

fraction.cpp:

 frac operator + (const frac &x, const frac &y)
{
    frac temp;
    temp.num = x.num * y.den + y.num * x.den;
    temp.den = x.den * y.den;
    temp.standard();
    return temp;
}

不知道为什么报错:“+”:不能添加两个指针
求大神指导指导

2个回答

leewers
leewers   2016.09.22 19:48

问题在于"1/2" + "1/4"是两个const char类型的指针相加,并不会调用你重载的方法,如果需要调用你重载的方法应该这样写

 frac a(1,2), b(1,4), c;
 c = a + b;
YXTS122
YXTS122   2016.09.22 21:14

#include<iostream>
using namespace std;
class Frac
{
private:
int num;
int den;
public:
Frac(int n=0,int d=1)
{
num=n;
den=d;
}
friend Frac operator+(const Frac& x,const Frac& y)
{
Frac temp;
temp.num=x.num*y.den+y.num*x.den;
temp.den=x.den*y.den;
// temp.standard();
return temp;
}
friend ostream& operator<<(ostream& os,Frac f)
{
os<<f.num<<"/"<<f.den<<"\n";
}
};
int main()
{
Frac a(1,2),b(1,4),c;
c=a+b;
cout<<c;
return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
[C/C++]_[操作符重载operator type()和operator()的区别]
1.看到WTL的CWindow源码时会发现这样的operator HWND()重载,仔细看会发现它并不是重载()操作符.
C++中operator<<运算符重载注意事项
我们在定义一个类的时候,为了使用方便,希望通过<<打印类的相关信息,需要重载<<运算符一般运算符重载都设计为类的member function,但是operator<<却不能这样设计,Essential C++中解释如下: 为什么不把output运算符设计为一个member function呢?因为作为一个member function,其左侧操作数必须是隶属同一个class之下的对象,如果ou
C++ 对于多重继承 重载operator = 时候的细节注意
// 1233.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" class CA { public: CA(){b = 10;}; ~CA(){}; CA(const CA&data) { *this = data; } const CA& operator = (const CA &other) { this->b = other.
C++库研究笔记——赋值操作符operator=的正确重载方式(三个准则)
C++ Operator Overloading Guidelines 设计要求: a, b, c, d, e; a = b = c = d = e = 42; This is interpreted by the compiler as: a = (b = (c = (d = (e = 42)))); MyClass a, b, c; ... (a = b)
C++operator重载问题
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。    这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。    一、为什么使用操作符重载? 对于系统的所有操作符,一般情况下,只
C++,重载输出操作符<<, cout.operator()是什么东东?
#include #include using namespace std; class Student { public: // 存 void setname(string s){ name = s;} void setage(int y){age = y; } void setaddress(string add){address = add;}
operator 类型转换及重载
类型转换函数的一般形式为 : operator 类型名() {实现转换的语句} 在函数名前面不能指定函数类型,函数没有参数.
【C++语法】关于operator[]重载的注意点
一个类重载operator[]()函数时,要重载operator[]两次,一个是const函数,一个是非const函数。
自己写的一个 struct中operator ()重载 和 模版编程 混合的小程序
#include using namespace std;templatestruct IsEqualType{ template bool operator() (inputT t) {      if ( typeid(reqT) == typeid(inputT) )    return true;   else    return false; }};templatevoid Pr
重载set的operator<()函数
重载set的operator struct A { int x; int y; int z; /* bool operator < (const A & other)const { return (x == other.x) ? y > other.y : x > other.x; } */ }; // end of struct A