zoukankan      html  css  js  c++  java
  • 第十六周项目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; }





  • 相关阅读:
    WebStorm下配置supervisor热部署NodeJS
    Node.js如何使用MySQL的连接池实例
    node.js中mysql连接池的使用
    VMware10下CentOS7的详细安装图解
    APP数据埋点
    (转载) Mysql----Join用法(Inner join,Left join,Right join, Cross join, Union模拟Full join)及---性能优化
    Python3 _ 读取大文件
    Python3 -- PySQL -- 将函数封装在类中
    Python3 MySQL 数据库连接
    js--同步运动json上
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7039919.html
Copyright © 2011-2022 走看看