美文网首页
C++之子类构造函数写法总结

C++之子类构造函数写法总结

作者: 瓜尔佳Anthony | 来源:发表于2020-09-23 09:40 被阅读0次

我们知道,构造方法是用来初始化类对象的。如果在类中没有显式地声明构造函数,那么编译器会自动创建一个默认的构造函数;并且这个默认的构造函数仅仅在没有显式地声明构造函数的情况下才会被创建创建。

构造函数与父类的其它成员(成员变量和成员方法)不同,它不能被子类继承。因此,在创建子类对象时,为了初始化从父类中继承来的成员变量,编译器需要调用其父类的构造函数。如果子类的构造函数没有显示地调用父类的构造函数,则默认调用父类的无参构造函数,至于什么事显式调用,在下面会详细说明!关于子类中构造函数的构造原则,总结如下,欢迎大家指导与批评。

  1. 父类没有声明构造函数

1.1 子类也没有声明自己的构造函数,则父类和子类均由编译器生成默认的构造函数。

1.2 子类中声明了构造函数(无参或者带参),则子类的构造函数可以写成任何形式,不用顾忌父类的构造函数。在创建子类对象时,先调用父类默认的构造函数(编译器自动生成),再调用子类的构造函数。

  1. 父类只声明了无参构造函数

如果子类的构造函数没有显式地调用父类的构造,则将会调用父类的无参构造函数。也就是说,父类的无参构造函数将会被隐式地调用。

  1. 父类只声明了带参构造函数

在这种情况下,要特别注意。因为父类只有带参的构造函数,所以如果子类中的构造函数没有显示地调用父类的带参构造函数,则会报错,所以必需显示地调用。关于构造函数的显示调用,参见下例。

{
protected:       //成员变量,声明为protected或者public,这里选择protected
        int height;  //若声明为private,则不能被子类继承访问,会报错
    int weight;
public:
    animal(int height,int weight)   //带参的构造函数
    {
        this->height=height;
        this->weight=weight;
        cout<<"animal的带参构造函数被调用"<<endl;
    }
    virtual ~animal()
    {
        cout<<"animal的析构函数被调用"<<endl;
    }
};
//子类
class fish:public animal
{
public:
    fish():animal(height,weight) //显示调用父类的构造函数
    {
        cout<<"fish的构造函数被调用"<<endl;
    }
    virtual ~fish()
    {
        cout<<"fish的析构函数被调用"<<endl;
    }
}; 

在子类fish的构造函数中,加上一个冒号(:),然后加上父类的带参构造函数,这就是父类构造函数的显式调用。这样,在子类的构造函数被调用时,系统就会去调用父类的带参构造函数,从而实现初始化父类的成员变量。运行结果如下:

image
  1. 父类同时声明了无参和带参构造函数

在这种情况下,子类只需要实现父类的一个构造函数即可,不管是无参的还是带参的构造函数。如果子类的构造函数没有显示地调用父类的构造函数(无参或带参),则默认调用父类的无参构造函数。

---CSDN hai008007

相关文章

  • C++之子类构造函数写法总结

    我们知道,构造方法是用来初始化类对象的。如果在类中没有显式地声明构造函数,那么编译器会自动创建一个默认的构造函数;...

  • JS的继承

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

  • 十五、Swift3.0之构造函数(本类和子类)和重载构造函数

    本类必选属性的构造函数。 子类的必选属性的构造过程。 构造函数总结:1、非Optional属性都必须在构造函数中设...

  • ES6之Class跟普通构造函数

    构造函数 Class构造函数 class的本质还是函数 Class 继承 总结 class更加贴近于面向对象的写法...

  • Java基础篇

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

  • C++中容易被忽略的基础知识

    const和define的区别C++中static关键字的总结C++中的构造函数及深拷贝浅拷贝c++基础之引用和指...

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

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

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

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

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

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

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

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

网友评论

      本文标题:C++之子类构造函数写法总结

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