精华内容
下载资源
问答
  • 1) 基类中的每个数据成员(尽管子类不一定都访问!) 2) 基类中的每个普通成员函数(尽管子类不一定都访问!) 3) 与基类相同的初始数据层 2.子类不会继承的基类的数据 1) 基类的构造函数与析构函数 2) 基类的友元 ...

    1.子类会从基类继承下来的所有数据

    1) 基类中的每个数据成员(尽管子类不一定都能访问!)
    2) 基类中的每个普通成员函数(尽管子类不一定都能访问!)
    3) 与基类相同的初始数据层

    2.子类不会继承的基类的数据

    1) 基类的构造函数与析构函数
    2) 基类的友元

    3.当一个子类对象被创建时

    -在栈或者堆上给整个对象分配存储空间(即从基类继承下来的数据大小加上子类自身数据成员的大小)。
    -调用基类的构造函数来初始化从基类继承下来的数据。
    -调用子类的构造函数来初始化子类中的数据成员。
    -此时,子类对象可以使用了。

    4.当一个子类对象被销毁时(生命周期结束或者delete显式释放):

    -首先调用子类的析构函数
    -调用基类的析构函数
    -最后这个对象的内存资源被回收

    5.下面探讨下继承中的权限问题

    a). 如上面1.1提到的,虽然子类会继承基类的所有数据成员,但是不一定都有权限去访问。取决于基类中的声明方式,以及继承方式。参考下面例子:
    #include<iostream>
    using namespace std;
    
    class A
    {
         int x;
    public:
         A() { x = 11; }
         A(int i) { x = i; }
         void print() { cout << x; }
    };
    
    class B : public A
    {
    public:
         B() :A(10) {  }
    };
    
    int main()
    {
         B b;
         b.print();
         return 0;
    }
    输出:
    10
    因为B继承了A的普通成员函数A::print()。虽然B的对象无法直接访问私有成员x, 但是A::print函数有权限访问x. 

    b). 基于a)中的程序,如果类B中覆写了这个函数,并打印x, 
    class B : public A
    {
    public:
        void print() { cout << x; }
    };
    则编译会失败,提示如下:
    error C2248: “A::x”: 无法访问 private 成员(在“A”类中声明)

    c). 基于a)中的程序,如果B是私有继承自A
    class B : private A
    则main函数中,当调用下面这行代码时:
    b.print();
    编译器会提示错误:
    “A::print”不可访问,因为“B”使用“private”从“A”继承

    这是因为虽然B继承了A的成员函数A::print(), 但是因为是私有private继承,B的对象已经没有权限访问print了。
    不过,如果还是想让B的对象可以访问这个函数,可以在B中增加一个公有函数,如下所示:
    void printHelp() { print(); }
    这样,b.printHelp()还是可以打印出x的值。
    展开全文
  • 哪些成员函数不继承

    千次阅读 2019-03-27 21:15:35
    C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。 1. 构造函数  构造方法用来初始化类的对象,与父类的其它成员...

    C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。

    1. 构造函数   

    构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。   如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。 构造原则如下:

    1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。

    2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。

    3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。

    4. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。

    5. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法)。

    6. 如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式 

    构造函数不能为虚:

    虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数

    https://blog.csdn.net/LC98123456/article/details/81143102

    要成为虚函数必须满足两点,一就是这个函数依赖于对象调用,因为虚函数就是依赖于对象调用,因为虚函数是存在于虚函数表中,有一个虚函数指针指向这个虚表,所以要调用虚函数,必须通过虚函数指针,而虚函数指针是存在于对象中的。二就是这个函数必须可以取地址,因为我们的虚函数表中存放的是虚函数函数入口地址,如果函数不能寻址,就不能成为虚函数。构造函数内联函数不可作为虚函数

    2. 析构函数   

    析构函数也不会被子类继承,只是在子类的析构函数中会调用父类的析构函数。

    • 如果没有将基类的析构函数定义为虚函数
      当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确是释放,因此造成内存泄露

    3. 赋值运算符重载函数   

    赋值运算符重载函数也不会被子类继承,只是在子类的赋值运算符重载函数中会调用父类的赋值运算符重载函数。

    展开全文
  • C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。 一,构造函数  构造方法用来初始化类的对象,与父类的其它成员...

    C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。

    一,构造函数   

    构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。   如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。 构造原则如下:

    1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。

    2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。

    3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。

    4. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。

    5. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法)。

    6. 如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式 。

    构造函数不能为虚:

    虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数

    要成为虚函数必须满足两点,一就是这个函数依赖于对象调用,因为虚函数就是依赖于对象调用,因为虚函数是存在于虚函数表中,有一个虚函数指针指向这个虚表,所以要调用虚函数,必须通过虚函数指针,而虚函数指针是存在于对象中的。二就是这个函数必须可以取地址,因为我们的虚函数表中存放的是虚函数函数入口地址,如果函数不能寻址,就不能成为虚函数。构造函数内联函数不可作为虚函数。

    二,析构函数   

    析构函数也不会被子类继承,只是在子类的析构函数中会调用父类的析构函数。

    • 如果没有将基类的析构函数定义为虚函数
      当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确是释放,因此造成内存泄露

    三,赋值运算符重载函数   

    赋值运算符重载函数也不会被子类继承,只是在子类的赋值运算符重载函数中会调用父类的赋值运算符重载函数。

    展开全文
  • 跟汤老师学Java笔记:继承的范围 完成:第一遍 1.继承的范围,子类可以继承父类的哪些成员?...父类的构造方法不能被子类继承(原因:构造方法名必须与类名相同,而子类名称不可能与父类相同) ...

    19.继承的范围:父类的哪些成员子类可以继承???

    学习:第7遍


    1.父类的哪些成员子类可以继承???

    父类的构造方法不能被子类继承
    原因:构造方法名必须与类名相同
    但是子类类名不可能与父类相同

    父类除了构造方法之外的属性和方法
    都可被子类继承,但子类不一定都能访问

    父类的public、protected修饰的属性和方法
    可以被子类访问

    父类默认修饰符修饰的属性和方法
    在同包的情况下,可以被子类访问
    不同包下,不可被子类访问

    父类的private修饰的属性和方法
    不能被子类访问

    展开全文
  • (1) 父类的构造方法不能被子类继承 a. 构造方法的方法名必须和自身类名一致,子类和父类各自有不同的类名;所以父类中定义构造方法...(2) 父类中属性和成员方法是否能被子类继承,取决于属性和方法的访问修饰符。 ...
  • Java调用被子类重写的方法

    千次阅读 2018-10-13 20:34:24
    但父类却不调用子类的方法,因为父类无法知道会被什么子类所继承,它的子类会增加哪些方法。 有一种情况例外,当父类的方法被子类重写后,父类表面上调用自己的类里的方法,但随着方法的动态调用,实际上调用了...
  • 3.友元:因为友元不是类的成员,因此友元函数不能被子类继承 4.构造函数、拷贝函数、赋值运算符重载、析构函数是否被子类继承 不同继承方式下派生类的对象模型 对象模型:对象中各个成员变量在内存中的存储方式 单...
  • 除了父类的构造函数和析构函数外,其余public和protected作用域的成员能被子类继承: 子类不能从父类继承的有:普通构造函数、拷贝构造函数、析构函数; 子类能够从父类继承的有:静态成员变量、静态成员...
  • 子类继承了父类的所有属性和方法, 但只有public、protected的属性和方法在子类是可见的。...是修饰符为public或是protected的父类属性成员或是方法能被子类所访问; private的属性成员或是方法则不能被访问。 ...
  • 继承那点事

    2018-04-27 20:55:13
    继承的简单理解1 继承的理解: 继承是面向对象最显著...java语言中,不允许一个类从多个一般类中继承属性和行为,即只支持单继承哪些可以被子类继承: 一切对象成员都可以被子类继承,包括私有成员.当子类继承父类...
  • 可能很多人都会觉得父类所有的东西都会被子类继承,包括成员函数和成员变量,否则就违背了“父子关系”这字面上的意思,其实不然,首先我们先看一小段简单的代码,这段代码很容易理解   #include &lt;...
  • 笔记02-继承练习

    2020-12-17 19:00:45
    1.3 请问父类的哪些成员能被子类继承,或者不能被直接访问? 私有的 1.4 请问子类是否可以同时继承多个父类? 不可以 问答题【抽象类】 4.1 请问定义抽象类、抽象方法使用的关键字是什么? abstract 4.2 请问...
  • 可能很多人都会觉得父类所有的东西都会被子类继承,包括成员函数和成员变量,否则就违背了“父子关系”这字面上的意思,其实不然,首先我们先看一小段简单的代码,这段代码很容易理解 点击(此处)折叠或打开...
  • C++ —— 经典面试题

    千次阅读 2018-04-29 09:00:20
     C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。 1. 构造函数  构造方法用来初始化类的对象,与父类的其它...
  • 都可以修饰类、方法、成员变量。 static可以修饰类的代码块,final不可以。... final方法不能被子类的方法复盖,但可以被继承。 final成员变量表示常量,只能被赋值一次,赋值后不能再被改变。 final不能用...
  • 被final修饰的方法不能被子类覆盖。 修饰变量 对于一个final变量,如果是基本类型的变量,则其数值一旦在初始化之后便不能改变; 如果是引用类型的变量,则在其初始化之后便不能再让其指向另一个对象。 当final用于...
  • JavaSE每日总结4.23

    2020-04-24 22:52:26
    1.请问子类继承父类用什么关键字? 继承使用 extends 关键字...父类的构造方法不能被子类继承 父类的私有成员变量和私有成员方法可以被继承,只是无法直接访问,可以通过父类中 public 的方法间接访问 4.请问子类是...
  • Day12 Object04-多态

    2020-06-14 15:47:24
    父类中的构造方法(不能被子类继承) c. 父类中的静态方法(不能被子类覆盖) d. 父类中被final修饰的方法(不能被子类覆盖) 2. 自己定义一个类,类中定义3个成员变量,这3个成员变量都被final修饰, 请用3
  • Java访问权限修饰词

    2019-11-22 01:08:00
    Java 访问权限修饰词 Java的访问权限修饰词一共有4个,先来看一下整理后的Java访问权限修饰词有哪些及对应的...​ 含义:被private修饰的类成员仅本类中可见,同时不能被子类继承; ​ 理解:private 体现了Java面向...
  • java-解析注解

    2020-09-24 21:15:55
    为了方便java程序员的一些操作,把需要的数据写在注解上。 先看元注解,我的理解就是注解写在类的哪些位置 /* @Target :描述注解能够作用的位置 *ElementType取值: ...@Inherited :描述注解是否被子类继承 */

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

哪些成员能被子类继承