zoukankan      html  css  js  c++  java
  • 【java&c++】父子类中同名函数的覆盖问题

    java和c++两门语言对于父子类中同名函数具有不同的处理方式。

    先上两段代码:

    C++:
    
    class Basic
    {
    public:
        void test(string i){
            cout << "basic str" <<endl;
        }
        void test(int i){
            cout << "basic" <<endl;
        }
    
        
    };
    
    class Senior : public Basic
    {
    
    public:
        void test(long i){
            cout << "senior 1" <<endl;
        }
    
    
    };
    
    int main(int argc, const char * argv[]) {
        // insert code here...
        std::cout << "Hello, World!
    ";
        
        Senior ps;
        ps.test(23);
        string str("c");
        ps.test(str);
        return 0;
    }

    //输出结果
    编译错误,提示No viable conversion from 'string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') to 'long'

    修改标红的代码--> ps.Basic::test(str) 则可以编译成功,并输出预期的结果

    senior 1

    basic str



    public class Basic{
        public int testException(int val) {
            try{
                int j = 3/1;
                return j;
            }
            catch(Exception e){
                return -1;
            }
        }
        public String testException(String val) {
            try{
                return new String("ac");
            }
            catch(Exception e){
                return new String("bc");
            }
        }
    
    };
    
    public class Senior extends Basic{
        public Long testException(Long val) {
            try{
                return  (long) 9;
            }
            catch(Exception e){
                return (long) 7;
            }
        }
    }
    
    public static void main(String args[]) throws InstantiationException, IllegalAccessException, SecurityException, Exception{
        // 向控制台输出信息
        
        Senior ba = new Senior();
        System.out.println("basic:" + ba.testException(2));
        System.out.println("basic:" + ba.testException("123"));
      }
    }

    输出结果

    basic:3

    basic:ac
     
     

    比较这个例子中的不同,原因是java语言中父类和子类的同名函数做的是重载处理,而C++中是隐藏父类中的函数,如果需要调用父类中同名函数,需要显式指定调用(通过class::funtion_name)。

  • 相关阅读:
    python 找到列表中满足条件的元素
    android activity动画anim
    Maven实战(Maven+Nexus建立私服【Linux系统】)
    linux命令
    服务端工程师入门与进阶 Java 版
    jvm字节占用空间分析
    Spark Streaming容错的改进和零数据丢失
    Spark分布式计算和RDD模型研究
    Apache Curator入门实战
    spark简单总结—短小精悍
  • 原文地址:https://www.cnblogs.com/seyjs/p/6245775.html
Copyright © 2011-2022 走看看