zoukankan      html  css  js  c++  java
  • 一些小问题

    问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:不能,没有虚函数的话,父类指针只能调用父类自己的函数,如果要调用同名的子类函数,则应该将父类的函数声明为虚函数。

  • 相关阅读:
    关于jquery
    3D转换(位置)+过渡+透视
    浅谈相对定位与绝对定位
    多层菜单
    菜单栏
    轮播图
    jsp中表格序号递增,varStatus="vs"
    关于数据库的增删改查
    put请求(单整体改),patch请求(群单改,群改)
    ModelSerializer 序列化和反序列化,及序列化整合,单删/增,群删/增(delete请求)
  • 原文地址:https://www.cnblogs.com/chenyg32/p/3773668.html
Copyright © 2011-2022 走看看