• 第十六周项目3: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;
    }
    
    改法1:改变函数名字。使之不与std空间内函数重名

    #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; }





  • 相关阅读:
    Android Studio安装与配置
    T-SQL:qualify和window 使用(十七)
    《c#图解教程》
    c# 创建,加载,修改XML文档
    c# 使用迭代器来创建可枚举类型
    C#上手练习3(while、do while语句)(添加机器人聊天)
    C#上手练习2(FOR语句)
    C#上手练习1(if语句、Swich语句)
    解决java导入project出现红叉
    ABAP ALV显示前排序合并及布局显示
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7039919.html
Copyright © 2020-2023  润新知