免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2004 | 回复: 0
打印 上一主题 下一主题

[C++] 关于运算符重载的一些问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-13 23:29 |显示全部楼层 |倒序浏览
10可用积分
问题1:
#include<iostream>
using namespace std;
class Point
{
      private:
              int x,y;
      public:
             Point(int X,int Y){x=X;y=Y;}
             int display(){cout<<"("<<x<<","<<y<<"";}
             Point operator ++();             //对类Point重载++运算符        
};
Point Point:perator++()
{  return Point(++x,++y);}

int main()
{
  Point a(1,2);
  cout<<"++a(1,2)="<<(++a).display();//运行结果是(2,3)++a(1,2)=4473856,为什么是出现这样的错误?
  system("pause";
  return 0;
}
问题2:
#include<iostream>
using namespace std;
class Shape
{
      public:
      virtual double getarea()=0;//纯虚函数
      virtual double getperim()=0;
      };
class rectangle:public Shape//应该不难理解,派生两个类
{
public:
rectangle (double x,double y){a=x; b=y;}
double  getarea(){cout<<a*b;}
double   getperim(){cout<<2*(a+b);}
private:
double a,b;
};
class circle:public Shape
{
public:
circle (double t){a=t;}
double getarea(){return 3.14*a*a;}
double getperim(){return 2*3.14*a;}
private:
double a;
};
void fun(Shape *a)
{
a->getarea();
a->getperim();
}
int main()
{
Shape *b;
rectangle c(3,4);//结果1214,如何把面积12和长度14的数据隔开?
circle d(4);//为什么圆类的长度面积没有显示呢?
b=&c;
fun(b);
b=&d;
fun(b);
}

问题3
#include<iostream>//输入字符串,计算其长度
using namespace std;
int slen(char *s)
{
for(i=0;s++;i++)
    return i;
}
int main()
{
    //在前面那个函数下,如何输入一个字符串呢?
   
  
   
    cout<<"长度是"<<slen(s)<<endl;
   
    return 0;
}

问题四
int a=5,*pa=&a,&(*pa)的值是多少?为什么?(我在机上试了,只是个内存地址...)

将单目运算符++重载为成员函数形式
#include<iostream>//这个程序的运行结果跟课本不同,课本的数据分别是23:59:59,23:59:59,0:0:1
using namespace std;
class Clock
{
      public:
             Clock(int NewH=0,int NewM=0,int NewS=0);
             void ShowTime();
             Clock&operator ++();//这里的&是什么意思,老师说去掉它也可以,为什么呢?

             Clock operator ++(int );
             private:
                     int Hour,Minute,Second;
};
Clock::Clock(int NewH,int NewM,int NewS)
{
if(0<NewS&&NewH<24&&0<=NewM&&NewM<60&&0<=NewS&&NewS<60)
{
Hour=NewH;
Minute=NewM;
Second+NewS;
}
else
cout<<"Time error!"<<endl;
}

void Clock::ShowTime()
{
           cout<<Hour<<":"<<Minute<<":"<<Second<<endl;
}
Clock&Clock:perator ++()
{
Second++;
if(Second>=60)
           {
                                 Second=Second-60;
                                 Minute++;
                                 if(Minute>=60)
                                 Hour++;
                                 if(Minute>=60)
                                 {
                                               Second=Second-60;
                                               Hour++;
                                               Hour+Hour%24;
                                 }
           }
           return *this;
           }
Clock Clock:perator++(int )
{
            Clock old=*this;
            ++(*this);
            return old;
}
int main()
            {
                Clock myClock(23,59,59);
                cout<<"First time output:";
                myClock.ShowTime();
                cout<<"Show myClock++:";
                (myClock++).ShowTime();
                cout<<"show ++myClock:";
                (++myClock).ShowTime();//我的运行结果是23:23:-1346719276,23:23:-1346719276,23:23:-1346719274,让我很奇怪,因为我是完全按书本敲进去的
                return 0;
            }
很希望从这次提问中学到些什么,谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP