| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1259 人关注过本帖
标题:请教有关类的声明与实现问题
只看楼主 加入收藏
lwf902
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-11-18
收藏
 问题点数:0 回复次数:11 
请教有关类的声明与实现问题
class Clock
{
public:
    Clock(int NH=0,int NM=0,int NS=0){H=NH;M=NM;S=NS;}
    void ST() {cout<<H<<":"<<M<<":"<<S<<endl;}    void operator++();
    void operator++(int);
private:
    int H,M,S;
};
请问void ST()(红色部分)为什么在类内定义时就是正确的,而在类外定义则出错?
搜索更多相关主题的帖子: 声明 
2008-11-23 18:36
lwf902
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-11-18
收藏
得分:0 
class Clock
{
public:
    Clock(int NH=0,int NM=0,int NS=0){H=NH;M=NM;S=NS;}
    void ST(){cout<<H<<":"<<M<<":"<<S<<endl;}
    void operator++();
    void operator++(int);
private:
    int H,M,S;
};
抱歉,上面写的东西有点乱,我的意思是为什么void ST()这个成员函数在类内实现时程序就可运行,而有类外实现则出错.
2008-11-23 18:39
asd6791868
Rank: 1
来 自:逆流
等 级:新手上路
帖 子:362
专家分:7
注 册:2008-7-27
收藏
得分:0 
void operator++();
void operator++(int)
哪个正确?
Clock operator++();
Clock operator++(int)

─條路 :  ┈片天  ┈個人  ─瞬間:
2008-11-23 19:18
lwf902
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-11-18
收藏
得分:0 
不用麻烦各位了,我找到了问题的答案,是我自己的疏忽,谢谢曾关注过本帖的人
2008-11-23 19:34
lwf902
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-11-18
收藏
得分:0 
回复 第3楼 asd6791868 的帖子
都正确
2008-11-23 19:36
hitcolder
Rank: 1
等 级:新手上路
威 望:1
帖 子:124
专家分:0
注 册:2008-10-28
收藏
得分:0 
楼主能不能讲的详细点啊,这个成员函数属于类本身,在类外是不可以单独调用的,比如:ST();这样调用是不可以的,如果     Clock a;
               a.ST();  
这样应该没问题吧,不知道是不是这个意思啊?

不要在你的智慧中夹杂傲慢,也不要使你们的谦卑缺乏智慧的成分。
2008-11-23 20:02
lwf902
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-11-18
收藏
得分:0 
回复 第6楼 hitcolder 的帖子
谢谢你的关注与答复,问题我已解决.我练习的主要是一个运算符重载的程序的一部分.
其实类外类内实现都可,只是出了一点小问题而已.完整代码如下.
#include "stdafx.h"
#include<iostream>
using namespace std;
class Clock
{public:
    Clock(int NH=0,int NM=0,int NS=0){H=NH;M=NM;S=NS;}
    void ST(){cout<<H<<":"<<M<<":"<<S<<endl;}    //ST表示ShowTime,这句可
    //在类外实现.void Clock::ST(){cout<<H<<":"<<M<<":"<<S<<endl;}   
         void operator++();                  
    void operator++(int);
private:
    int H,M,S;
};

//void ST()
//{cout<<H<<":"<<M<<":"<<S<<endl;}

void Clock::operator ++()
{S++;
  if(S>=60)
   {S=S-60;
    M++;
       if(M>=60)
       {M=M-60;
           H++;
           H=H%24;
       }
    }
cout<<"++Clock;";
}

void Clock::operator ++(int)
{S++;
  if(S>=60)
   {S=S-60;
    M++;
       if(M>=60)
       {M=M-60;
           H++;
           H=H%24;
       }
    }
cout<<"++Clock++;";
}

int _tmain(int argc, _TCHAR* argv[])
{Clock myClock(23,59,59);
cout<<"First time output:";
myClock.ST();
myClock++;
myClock.ST();
++myClock;
myClock.ST();
    return 0;
}
2008-11-23 21:30
asd6791868
Rank: 1
来 自:逆流
等 级:新手上路
帖 子:362
专家分:7
注 册:2008-7-27
收藏
得分:0 
运算符重载可以定义为void 类型的么?

─條路 :  ┈片天  ┈個人  ─瞬間:
2008-11-24 14:20
hitcolder
Rank: 1
等 级:新手上路
威 望:1
帖 子:124
专家分:0
注 册:2008-10-28
收藏
得分:0 
回复 第8楼 asd6791868 的帖子
可以定义为void类型,比如说可以使用引用参数或指针来重载单目运算符,不用返回值也是OK的,比如:
#include<iostream>
using namespace std;

class complex{
public:
    double real;
    double image;
    complex(double m=0,double n=0){real=m;image=n;}
};

void operator++(complex &m)
{
m.real++;
m.image++;            ///这里是完全不用返回值的,但是通常还是要返回和它的操作的类相同的类型
}

int main()
{
complex com3(1.4,3.5);
cout<<com3.real<<"   "<<com3.image<<endl;
++com3;
cout<<com3.real<<"   "<<com3.image<<endl;
return 0;
}

不要在你的智慧中夹杂傲慢,也不要使你们的谦卑缺乏智慧的成分。
2008-11-24 15:52
hitcolder
Rank: 1
等 级:新手上路
威 望:1
帖 子:124
专家分:0
注 册:2008-10-28
收藏
得分:0 
回复 第7楼 lwf902 的帖子
赫赫,我也刚学不久,大家互相学习

不要在你的智慧中夹杂傲慢,也不要使你们的谦卑缺乏智慧的成分。
2008-11-24 15:53
快速回复:请教有关类的声明与实现问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018077 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved