zoukankan      html  css  js  c++  java
  • 关于继承和虚函数的入门讨论

    前几天去面试,碰到下面一道题目,问输出是什么?

    #include <iostream>
    using namespace std;
    
    class Base
    {
    public:
    	virtual void function()
    	{
    		cout<<"function in Base\n";
    	}
    
    	void function (int param)
    	{
    		cout<<"function in Base with param\n";
    	}
    };
    
    class Derived : public Base
    {
    public:
    	virtual void function()
    	{
    		cout<<"function in Derived\n";
    	}
    	void function(int param)
    	{
    		cout<<"function in Derived with param\n";
    	}
    };
    
    void main()
    {
    	Base base;
    	Derived derived;
    	
    	base.function();
    	base.function(1);
    	derived.function();
    	derived.function(1);
    
    	Base * print = (Base *)&derived;
    	print->function();
    	print->function(1);
    }
    

    以下有solution的part:

    #include <iostream>
    using namespace std;
    
    class Base
    {
    public:
    	virtual void function()
    	{
    		cout<<"function in Base\n";
    	}
    
    	void function (int param)
    	{
    		cout<<"function in Base with param\n";
    	}
    };
    
    class Derived : public Base
    {
    public:
    	virtual void function()
    	{
    		cout<<"function in Derived\n";
    	}
    	void function(int param)
    	{
    		cout<<"function in Derived with param\n";
    	}
    };
    
    void main()
    {
    	Base base;
    	Derived derived;
    	
    	base.function();//function in Base,没有疑问
    	base.function(1);//function in Base with param,没有疑问
    	derived.function();//function in Derived,没有疑问
    	derived.function(1);//function in Derived with param,没有疑问
    
    	Base * print = (Base *)&derived;//这里加不加(Base *),下面的结果都是相同的
    	print->function();//这里,虽然是Base类型的指针,但是因为是虚函数的原因,有vbtl做指示,所以总是可以判断出属于哪一层
    	print->function(1);//在这里,既然是Base类型的指针,那么其function()就会调用Base中的function,function in Base with param
    }
    

  • 相关阅读:
    十二周学习进度
    冲刺第十天
    19.Maven 的单模块之 Spring MVC + Spring + Spring Data JPA 项目(基于 IntelliJ IDEA)
    18. Maven 的单模块 / 多模块之 Spring MVC + Spring + Mybatis 项目讲解(重点)
    16.Java Web 项目环境搭建
    17.Maven 项目介绍
    15.Postfix Completion 的使用
    16.插件讲解
    14.Emmet 讲解
    13.文件代码模板讲解
  • 原文地址:https://www.cnblogs.com/lihaozy/p/1865898.html
Copyright © 2011-2022 走看看