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

  • 相关阅读:
    第四篇:new和delete的基本用法
    第三篇:C++ 中的几种初始化
    第七篇:使用 CUDA 进行计算优化的两种思路
    第六篇:二维数组的传输 (host <-> device)
    poj 2762(强连通+判断链)
    poj 3352(边双连通分量)
    poj 3228(二分+最大流)
    poj 3522(最小生成树应用)
    poj 2349(最小生成树应用)
    poj 1733(带权并查集+离散化)
  • 原文地址:https://www.cnblogs.com/chenyg32/p/3773668.html
Copyright © 2011-2022 走看看