第十六周項目3:max帶來的沖突
阿新 • • 發佈:2017-06-17
clu 文件 沖突 include 實例化 post 本地 日期 空間
改法1:改變函數名字。使之不與std空間內函數重名
改法2:加上全局限定符,使用的是本地定義的函數
改法3:強調max函數的命名空間
改法4:去掉using namespace std;。在main中cout等std中的名稱前加std::
改法5:僅僅使用std空間裏的cout和endl
改法6:將max定義在自己的空間內
問題及代碼:
/* *Copyright (c)2015,煙臺大學計算機與控制工程學院 *All rights reserved. *文件名:project.cpp *作 者:陳文青 *完畢日期:2015年6月28日 *版 本 號:v1.0 * *問題描寫敘述:分析以下程序出現的編譯錯誤,給出解決的方案。 *程序輸入: *程序輸出: */ #include<iostream> using namespace std; //定義函數模板 template<class T> T max(T a, T b) { return (a>b)?a:b; } int main() { int x=2,y=6; double x1=9.123,y1=12.6543; cout<<"把T實例化為int:"<<max(x,y)<<endl; cout<<"把T實例化為double:"<<max(x1,y1)<<endl; return 0; }
#include<iostream> using namespace std; //定義函數模板 template<class T> T max1(T a, T b)//將函數改為max1 { return (a>b)?a:b; } int main() { int x=2,y=6; double x1=9.123,y1=12.6543; cout<<"把T實例化為int:"<<max1(x,y)<<endl; cout<<"把T實例化為double:"<<max1(x1,y1)<<endl; return 0; }
改法2:加上全局限定符,使用的是本地定義的函數
/* *Copyright (c)2015,煙臺大學計算機與控制工程學院 *All rights reserved. *文件名:project.cpp *作 者:陳文青 *完畢日期:2015年6月28日 *版 本 號:v1.0 * *問題描寫敘述:分析以下程序出現的編譯錯誤。給出解決的方案。 *程序輸入: *程序輸出: */ #include<iostream> using namespace std; //定義函數模板 template<class T> T max(T a, T b) { return (a>b)?a:b; } int main() { int x=2,y=6; double x1=9.123,y1=12.6543; cout<<"把T實例化為int:"<<::max(x,y)<<endl;//加上全局限定符 cout<<"把T實例化為double:"<<::max(x1,y1)<<endl; return 0; }
改法3:強調max函數的命名空間
#include<iostream> using namespace std; //定義函數模板 template<class T> T max(T a, T b) { return (a>b)?a:b; } int main() { int x=2,y=6; double x1=9.123,y1=12.6543; cout<<"把T實例化為int:"<<std::max(x,y)<<endl; //強調是std空間內的函數 cout<<"把T實例化為double:"<<std::max(x1,y1)<<endl; return 0; }
改法4:去掉using namespace std;。在main中cout等std中的名稱前加std::
#include<iostream> //不使用std空間 //using namespace std; //定義函數模板 template<class T> T max(T a, T b) { return (a>b)?a:b; } int main() { int x=2,y=6; double x1=9.123,y1=12.6543; std::cout<<"把T實例化為int:"<<max(x,y)<<std::endl; //聲明endl和cout的空間 std::cout<<"把T實例化為double:"<<max(x1,y1)<<std::endl; return 0; }
改法5:僅僅使用std空間裏的cout和endl
#include<iostream> using std::cout;//僅僅使用std空間裏的cout和endl using std::endl; //定義函數模板 template<class T> T max(T a, T b) { return (a>b)?a:b; } int main() { int x=2,y=6; double x1=9.123,y1=12.6543; cout<<"把T實例化為int:"<<max(x,y)<<endl; cout<<"把T實例化為double:"<<max(x1,y1)<<endl; return 0; }
改法6:將max定義在自己的空間內
#include<iostream> using namespace std; namespace m //將max定義在m空間裏 { //定義函數模板 template<class T> T max(T a, T b) { return (a>b)?a:b; } } int main() { int x=2,y=6; double x1=9.123,y1=12.6543; cout<<"把T實例化為int:"<<m::max(x,y)<<endl; //使用自己m空間內的max函數 cout<<"把T實例化為double:"<<m::max(x1,y1)<<endl; return 0; }
第十六周項目3:max帶來的沖突