zoukankan      html  css  js  c++  java
  • 继承的小问题

    class A 

    {

    public:

    A(int x):i(x) {}


    void foo()

    {

    cout<<"A"<<endl;

    }


    protected:

    int i;

    };


    class B : public A 

    {

    public:

    B(int x, int y):A(x), i(y) {}


    void foo()

    {

    cout<<"B"<<endl;

    }


    void display()

    {

    cout<<A::i + i<<endl;

    }


    private:

    int i;

    };



    int main()

    {

    A a(10);

    B b(100, 200);

    a.foo();

    b.foo();

    b.A::foo();

    b.display();

    }


    改程序的输出是A B A 300


    说明:

    1、如果基类声明了一个虚函数void foo()的话,在派生类中想覆盖这个函数的话必须定一个完全一摸一样的函数,包括返回值,才可以覆盖基类的虚函数。


    2、如果基类声明了一个普通的成员函数(非虚函数)void foo(),在派生类同样声明一个一摸一样的函数void foo(), 则派生类的这个函数不覆盖基类饿同名函数,它们还是各归各的。

    3、如果基类中声明可一个成员变量int i; 如果在派生类中声明一个完全同名的成员变量int i; 则派生类的i也不会覆盖基类的i,它们还是各归各的。

    4、继承的时候,基类的私有成员无论何种继承方式下都不能被派生类访问,包括派生类的成员函数也不可以访问。


  • 相关阅读:
    [HDU 2553] N皇后问题
    [ZOJ 3063] Draw Something Cheat
    [ZOJ 3609] Modular Inverse
    [ZOJ 3610] Yet Another Story of Rock-paper-scissors
    [ZOJ 3607] Lazier Salesgirl
    [ZOJ 3710] Friends
    [ZOJ 3076] Break Standard Weight
    智慧树自动刷课代码
    Attention
    sizeof总结
  • 原文地址:https://www.cnblogs.com/kex1n/p/2286521.html
Copyright © 2011-2022 走看看