美文网首页
C++温故知新4(子类的构造函数)

C++温故知新4(子类的构造函数)

作者: 李相赫的乐芙兰 | 来源:发表于2019-03-21 10:11 被阅读0次

子类不能继承父类的构造函数,而生成一个对象时,会从最基础的父类开始调用构造函数
有以下几种情况:

  1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。
class A{
    public:
    A(int v = 1){m_v = v;}
    void Print(){printf("A val = %d\n",m_v);}

    int m_v;
};

class B:public A{
public:
    //B(int v){m_v=v;}

    int m_v;
};

int main(){
    B tmp_b;
    printf("%d\n",tmp_b.m_v);
    tmp_b.Print();
    return 0;
}
情况1.png
  1. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。

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

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

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

class A{
    public:
    A(int v = 1){m_v = v;}
    void Print(){printf("A val = %d\n",m_v);}

    int m_v;
};

class B:public A{
public:
    B(int v){m_v=v;}

    int m_v;
};
编译错误.png
  1. 如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式

相关文章

  • C++温故知新4(子类的构造函数)

    子类不能继承父类的构造函数,而生成一个对象时,会从最基础的父类开始调用构造函数有以下几种情况: 如果子类没有定义构...

  • Java基础篇

    父类子类构造函数 子类的构造函数会隐式调用父类的无参构造函数,子类若想调用父类的构造函数需在子类的构造函数的第一行...

  • java子类调用父类构造器函数

    子类 调用 父类的构造函数:(构造函数不会被继承,只是被子类调用而已) 1、子类所有的 构造函数 默认调用父类的无...

  • 剑指offer 面试题48:不能被继承的类(C++)

    题目:用C++设计一个不能被继承的类 解法一:分析:子类在构造对象时会调用基类的构造函数,通过把基类的构造函数设为...

  • C++ 从入门到放弃 (Day-07)

    父类的构造函数 ◼ 子类的构造函数默认会调用父类的无参构造函数◼ 如果子类的构造函数显式地调用了父类的有参构造函数...

  • C#继承与构造函数的调用

    1、实例化父类时,可以使用new子类,执行构造函数顺序为:先执行父类构造函数,再执行子类构造函数。 2、实例化子类...

  • Boolan(博览网)——C++面向对象高级编程(下)(第五周作

    1. 构造函数和析构函数的调用过程 创建子类时,先调用父类的构造函数,再调用子类的构造函数。(构造由内而外) 销毁...

  • 继承之借用构造函数

    设计思想:子类型的构造函数内部借用(调用)父类的构造函数 核心代码:子类型构造函数内:Person.call(th...

  • C++ 拷贝构造函数浅析

    什么是拷贝构造函数:拷贝构造函数,顾名思义,就是在拷贝的时候调用的构造函数。 几个原则:C++ primer p4...

  • JS的继承

    ES5写法 关键点: 在子类构造函数中调用父类构造函数 将子类构造函数原型指向父类构造函数原型。考虑兼容性问题,我...

网友评论

      本文标题:C++温故知新4(子类的构造函数)

      本文链接:https://www.haomeiwen.com/subject/eogfvqtx.html