最近開始認真地再學一下C++的編程,陸續會有一些筆記整理出來。
今天要講的是,C++程序中,方法之間調用的一個需要注意的地方
例如,我們有一個方法
int maxvalue(int a,int b,int c)
{
if(a<b) a=b;
if(a<c) a=c;
return a;
}
我們需要在另外一個方法裡面調用它
int main()
{
int a=5,b=8,c=10;
cout<< maxvalue(a,b,c);
return 0;
}
那麼請注意了,maxvalue方法是必須定義在main方法之前的,而不能在後面。
下面的代碼能編譯通過
#include <iostream>
using namespace std;
int maxvalue(int a,int b,int c)
{
if(a<b) a=b;
if(a<c) a=c;
return a;
}
int main()
{
int a=5,b=8,c=10;
cout<< maxvalue(a,b,c);
return 0;
}
而下面的代碼則會出現編譯錯誤
#include <iostream>
using namespace std;
int main()
{
int a=5,b=8,c=10;
cout<< maxvalue(a,b,c);
return 0;
}
int maxvalue(int a,int b,int c)
{
if(a<b) a=b;
if(a<c) a=c;
return a;
}
當然,也可以將該方法單獨定義在一個頭文件中,然後Include進來,這個機制與ASP裡面是一樣的
我們先將如下代碼定義為common.h文件
int maxvalue(int a,int b,int c)
{
if(a<b) a=b;
if(a<c) a=c;
return a;
}
然後修改原先的代碼文件
#include <iostream>
#include "common.h"
using namespace std;
int main()
{
int a=5,b=8,c=10;
cout<< maxvalue(a,b,c);
return 0;
}
include這個指令其實就相當於是將common.h的內容插入到當前cpp文件的頂部。
那麼,為什麼同樣是include,但有兩種寫法呢?
#include <iostream>
#include "common.h"
原因在於,第一個iostream是所謂的標准庫(必須用<>包含),而第二個common.h是自定義庫(必須用雙引號包含)
還有一個問題,如果此時我們的調用方也定義了一個maxvalue方法呢
#include <iostream>
#include "common.h"
using namespace std;
int maxvalue(int a,int b,int c)
{
return c;
}
int main()
{
int a=5,b=8,c=10;
cout<< maxvalue(a,b,c);
return 0;
}
結果會怎麼樣?答案是無法通過編譯
但是,如何解決這樣的問題呢?答案是可以為common.h定義一個命名空間,如下
namespace common{
int maxvalue(int a,int b,int c)
{
if(a<b) a=b;
if(a<c) a=c;
return a;
}
}
這樣的話,就可以通過下面的方式來調用該方法呢
#include <iostream>
#include "common.h"
using namespace std;//這是導入命名空間的語法,與C#是不一樣的,多了一個特殊的namespace關鍵字
int maxvalue(int a,int b,int c)
{
return c;
}
int main()
{
int a=5,b=8,c=10;
cout<< common::maxvalue(a,b,c);//調用common.h中的maxvalue方法,用兩個冒號表示命名空間限定符,這與C#也不一樣
cout << endl;
cout << maxvalue(a,b,c);//這是調用自己定義的maxvalue方法
return 0;
}