Posted on 2008-01-12 17:37
yutou 阅读(366)
评论(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
12
int 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
//这里要加上下面这行
5
using namespace std;
6
7
class number
8

{
9
public:
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 );
19
private:
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
//减法
9
number operator - (number &t1 , number &t2)
10

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

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

{
23
return number ( t1.num / t2.num , t1.word / t2.word );
24
}
25
26
//考虑到时间问题,输出的一些处理细节没有加上去。。。