Posted on 2008-01-12 17:37
yutou 閱讀(370)
評論(0) 編輯 收藏 引用 所屬分類:
Programming
書上的一些代碼在VS里不能通過編譯,比如重載雙目運(yùn)算符,假如把雙目運(yùn)算符重載函數(shù)定義為類的成員函數(shù),就無法通過編譯,一大把的error massage說不能訪問private成員什么的。然后把函數(shù)改成在類中聲明為友元函數(shù),編譯就能過。。
把今天的習(xí)題貼上來,給以后留個參考,以免再出現(xiàn)這種問題又不知道該花我多少時間。
main.cpp
1
//主函數(shù)文件
2
3
//老譚說vc 6得把下面的" <iostream> "改成帶 .h后綴的iostream文件,VS這里不用改了,寫成下面的形式就行,而且好象已經(jīng)沒有了帶 .h后綴的iostream了,至少我試了一下說找不到文件和目錄
4
#include <iostream>
5
#include "10_2_stdafx.h"
6
//加conio使用getch函數(shù)報C4996錯誤的問題我還是沒有解決
7
#include "conio.h"
8
//假如要搞運(yùn)算符重載,using namespace std已經(jīng)不需要了,所以下面這行給注釋掉了
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
//有不使用構(gòu)造函數(shù)初始化的對象加上下面這行
11
number()
{ num=0 ; word=0; };
12
number(int x , int y):num(x),word(y)
{}
13
//本來這里應(yīng)該寫好一點,一些可能的情況沒有寫進(jìn)去,我懶得寫了
14
void display()
{ cout<<"the objet:"<<num<<"& &"<<word<<endl; };
15
//下面是三個友元重載函數(shù)
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
//重載函數(shù)定義文件
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
//考慮到時間問題,輸出的一些處理細(xì)節(jié)沒有加上去。。。