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//考虑到时间问题,输出的一些处理细节没有加上去。。。