首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问个运算符重载的基础有关问题,多谢

2012-03-22 
问个运算符重载的基础问题,谢谢C++里的运算符重载有什么用处呢?为什么要重载呢?我看到一本书里有个重载[]

问个运算符重载的基础问题,谢谢
C++里的运算符重载有什么用处呢?为什么要重载呢?
我看到一本书里有个重载[]的例子:
#include <iostream>
using   namespace   std;

const   int   SIZE   =   3;

class   atype   {
      int   a[SIZE];
public:
      atype()   {
                int   i;
                for(i   =   0;   i <SIZE;   i++)     a[i]   =   i;
      }
      int   operator[]   (int   i)   {   return   a[i];}        
};
int   main()
{
        atype   ob;
        cout   < <   ob[2];   //   输出2
        return   0;
}
这里面说重载了[],结果ob[2]就是显示数组里第二个元素的值,可如果我不重载[],ob[2]的意思不也是输出第二个元素的值吗?这里面重载[]到底有什么用处呢?

[解决办法]
你这段代码去掉重载是通不过编译的

因为C++默认的[]只对基本数据类型起作用,遇到自定义的类型只有重载才能让编译器知道对你自定义类型的[]运算该采取什么行为
[解决办法]
C++里的运算符重载有什么用处呢?为什么要重载呢?
答:运算符重载是为了使自定义类的运作方式更像内建类型。


可如果我不重载[],ob[2]的意思不也是输出第二个元素的值吗?
答:如果不重载[],楼住可以试验一下ob[2]应该是非法的,因为ob是class atype类型的,而不是“数组”。

热点排行