C++中为什么要用运算符重载,前面一个类名的话是返回类型?那么返回的是类?重载的意义何在呢?const类型初始

例1:classa{public:a():c(5){];aoprater+()(aa1)const{returna(b+a1.b);};private:intb;cons... 例1:
class a
{
public:
a():c(5){];
a oprater +()(a a1)const{return a(b+a1.b);};
private:
int b;
const int c;

形如此例,重载+号不还是用的默认意义吗?既然是默认意义,重载还有什么意义呢?如果说重载是为了不同的类型,那么C++可以处理的默认类型是什么?(运算符可操作的对象是那些?)另,a1是a的一个对象的话,那他怎么可以直接访问私有成员b呢?应该是通过成员函数访问啊;const 类型一般是说声明时就要初始化.既然这样,为什么这里却不初始化呢?如果是说不能在类体内初始化,那么为什么构造函数就可以(不要笑,这不是自相矛盾?)

再例:
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;

class Root{ // 一元二次方程的根
public:
const double x1; // 第一个根
const double x2; // 第二个根
const int num_of_roots; // 不同根的数量:0、1 或 2
Root(): x1(0.0), x2(0.0), num_of_roots(0){} //创建一个“无实根”的Root对象
Root(double root):x1(root),x2(root),num_of_roots(1){} //创建一个“有两个相同的实根”的Root对象
Root(double root1, double root2):x1(root1),x2(root2),num_of_roots(2){] //创建一个“有两个不同的实根”的Root对象
.......
}
这个问题就更奇怪了,既然num_of_roots声明为const;那么怎么可以更换其值呢?

忘高手做出详细的解释.
请给出详细代码,谢谢.
展开
 我来答
以脸为证
2010-10-22 · TA获得超过736个赞
知道小有建树答主
回答量:294
采纳率:100%
帮助的人:101万
展开全部
运算符重载是方便你进行类对象与类对象之间的换算
注意是类对象,而不是变量
变量之间的数学运算是默认的,但你自己写的类之间进行运算,如果不用运算符重载是编译不通过的
比如你的例1
如果不写运算符重载函数是无法执行a1+a2的,因为它们是类对象,编译器不知道如何去执行+运算
另外,a1就是a类的,显然是可以访问自己类的私有成员的
最后,const成员不是不可以在类中初始化,只是不能写成const int c=5;这种形式,要么在类外初始化,要么在构造函数中初始化,都是可以的

例2中并不是更换其值,而是给了你两个构造函数。在用第一个构造函数时对象的num_of_roots默认值是1,用第二个构造函数时对象的num_of_roots默认值是2
招珈蓝荣Oi
2010-10-22 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.3万
采纳率:0%
帮助的人:1.3亿
展开全部
童鞋,我认为这个题目非常的好,希望你可以好好的体会一下,这个题目的解决如果要是不吧char* b改成Complex& b; charc=chara+charb;//这段就会
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式