首页 > 代码库 > 【java&c++】父子类中同名函数的覆盖问题
【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!\n"; 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)。
【java&c++】父子类中同名函数的覆盖问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。