c++运算符重载

重载运算符使两个string类对象相乘 如sting A;sting B;A*B(A,B为数字组成的字符串)
怎么做

c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c++中不止函数可以重载,运算符也可以重载。由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。

在进行对象之间的运算时,程序会调用与运算符相对应的函数进行处理,所以运算符重载有两种方式:成员函数和友元函数。成员函数的形式比较简单,就是在类里面定义了一个与操作符相关的函数。友元函数因为没有this指针,所以形参会多一个。

class A
{
public:
A(int d):data(d){}
A operator+(A&);//成员函数
A operator-(A&);
A operator*(A&);
A operator/(A&);
A operator%(A&);
friend A operator+(A&,A&);//友元函数
friend A operator-(A&,A&);
friend A operator*(A&,A&);
friend A operator/(A&,A&);
friend A operator%(A&,A&);
private:
int data;
};
//成员函数的形式
A A::operator+(A &a)
{
return A(data+a.data);
}

A A::operator-(A &a)
{
return A(data-a.data);
}

A A::operator*(A &a)
{
return A(data*a.data);
}

A A::operator/(A &a)
{
return A(data/a.data);
}

A A::operator%(A &a)
{
return A(data%a.data);
}
//友元函数的形式
A operator+(A &a1,A &a2)
{
return A(a1.data+a2.data);
}

A operator-(A &a1,A &a2)
{
return A(a1.data-a2.data);
}

A operator*(A &a1,A &a2)
{
return A(a1.data*a2.data);
}

A operator/(A &a1,A &a2)
{
return A(a1.data/a2.data);
}

A operator%(A &a1,A &a2)
{
return A(a1.data%a2.data);
}

//然后我们就可以对类的对象进行+、-、*、/了。
void main(void)
{
A a1(1),a2(2),a3(3);
a1=a2+a3;
//或者
a1=a2.operator+(a3);
}

注意:在进行a2+a3的时候会出错,因为在上面对+定义了两种方法,去掉一种即可。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-23
string operator * (const string& a, const string& b) {
string c("");
//在网上搜一个大数相乘的计算方法,然后将结果计算出来,赋值给c
return c;
}

还是你不知道大数相乘的方法?追问

刚学c++,想用它 试试。这个重载不需要放在任何类声明中?

追答

不用,因为你这是使用string类的,但是你又不能对string类做修改(STL),所以可以在外面直接定义一个string类的操作,当然这个操作肯定是要有作用域限制的。
如果你想试一下,可以这样:
int operator*(int a, int b)
{
return a+b;
}
这样,如果有
int a = 10;
int b = 20;
int c = a*b;
那么c就为30而不是200了,不用string类那么复杂的。

本回答被提问者采纳
相似回答
大家正在搜