yutou's blog

请不要做浮躁的人,请热爱C++。
posts - 14, comments - 1, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

visual studio 2005中的双目运算符重载

Posted on 2008-01-12 17:37 yutou 阅读(360) 评论(0)  编辑 收藏 引用 所属分类: Programming
书上的一些代码在VS里不能通过编译,比如重载双目运算符,假如把双目运算符重载函数定义为类的成员函数,就无法通过编译,一大把的error massage说不能访问private成员什么的。然后把函数改成在类中声明为友元函数,编译就能过。。
把今天的习题贴上来,给以后留个参考,以免再出现这种问题又不知道该花我多少时间。

main.cpp
 1//主函数文件
 2
 3//老谭说vc 6得把下面的" <iostream> "改成带 .h后缀的iostream文件,VS这里不用改了,写成下面的形式就行,而且好象已经没有了带 .h后缀的iostream了,至少我试了一下说找不到文件和目录
 4#include <iostream>
 5#include "10_2_stdafx.h"
 6//加conio使用getch函数报C4996错误的问题我还是没有解决
 7#include "conio.h"
 8//假如要搞运算符重载,using namespace std已经不需要了,所以下面这行给注释掉了
 9//using namespace std; 
10
11
12int main()
13{
14    number c1(1,2) , c2(3,4) , c3;
15    c3 = c2 - c1;
16    c3.display();
17
18    c3 = c2 * c1;
19    c3.display();
20    
21    c3 = c2 / c1;
22    c3.display();
23
24    getch();
25    return 0;
26}

10_2_stdafx.h
 1//头文件
 2
 3#include <iostream>
 4//这里要加上下面这行
 5using namespace std;
 6
 7class number
 8{
 9public:
10        //有不使用构造函数初始化的对象加上下面这行
11    number() { num=0 ; word=0; };
12    number(int x , int y):num(x),word(y){} 
13        //本来这里应该写好一点,一些可能的情况没有写进去,我懒得写了
14    void display() { cout<<"the objet:"<<num<<"& &"<<word<<endl; };
15        //下面是三个友元重载函数
16    friend number operator - (number &t1 , number &t2 );
17    friend number operator * (number &t1 , number &t2 );
18    friend number operator / (number &t1 , number &t2 );
19private:
20    int num;
21    int word;
22}
;
23

func_def.cpp
 1//重载函数定义文件
 2
 3//这里的iostream和名字空间和main的一样
 4#include <iostream>
 5#include "10_2_stdafx.h"
 6//using namespace std;
 7
 8//减法
 9number operator - (number &t1 , number &t2)
10{
11    return number( t1.num - t2.num , t1.word - t2.word);
12}

13
14//乘法
15number operator * (number &t1 , number &t2 )
16{
17    return number ( t1.num * t2.num , t1.word * t2.word );
18}

19
20//除法
21number operator / (number &t1 , number &t2 )
22{
23    return number ( t1.num / t2.num , t1.word / t2.word );
24}

25
26//考虑到时间问题,输出的一些处理细节没有加上去。。。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理