• 一些小问题


    问1:子类继承了父类的所有成员,对吗?

    答1:错,至少子类没有继承父类的构造函数(析构函数不知有没有继承,但复制构造函数肯定是继承了)。

    class A
    {
        public:
        A(){}
        A(int x){}
        A(const A& a){cout << "Copy Constructor" << endl;}
        A& operator=(const A& a){cout << "=" << endl;}
    };
    
    class B: public A{};
    
    int main()
    {
        A a(10);
        B b;        //ok b调用了自己的构造函数,再调用了A的空构造函数
        //B b(10);    //error b没有该构造函数(说明B不会继承A的构造函数)
        
        A a2 = a;    //ok 输出Copy Constructor
        B b2 = b;    //ok 输出Copy Constructor,B继承了A的赋值构造函数,但只是部分复制(B中特有的成员不能被复制)
        
        A a3;
        a3 = a2;     //ok 输出= 
        B b3;
        b3 = b2;    //ok 输出= B继承了A的operator=赋值函数    
    }
    View Code

    问2:父类指针指向子类对象,通过该指针能够调用子类特有(父类没有)的函数吗?

    答2:不能,见下例。

    #include <iostream>
    using namespace std;
    
    class A{};
    
    class B:public A
    {
        void hello()
        {
            cout << "Hello" << endl;
        }
    };
    
    int main()
    {
        B b;
        
        A* a = &b;    //父类指针指向子类对象 
        
        a->hello();    //编译失败 
    }
    View Code

    问3:问2的基础上,若该函数在父类中也声明了,通过该指针能够调用子类特有(父类也有,但函数体不一样)的函数吗?若不能怎么才能做到?

    答3:不能,没有虚函数的话,父类指针只能调用父类自己的函数,如果要调用同名的子类函数,则应该将父类的函数声明为虚函数。

  • 相关阅读:
    Jmeter简单教程
    SpringMVC @RequestBody请求参数在postman中的请求
    maven多环境部署
    idea中项目文件颜色含义
    本地Consumer和Producer无法使用远程Kafka服务器的处理办法
    CentOS7 64位下MySQL5.7安装与配置(YUM)
    git学习笔记
    Nginx的启动、重启、关闭命令
    Mysql update 错误
    spring框架源码编译
  • 原文地址:https://www.cnblogs.com/chenyg32/p/3773668.html
Copyright © 2020-2023  润新知