构造函数初始化列表 组合类构造函数

一、类的构造函数初始化列表

在构造Point类的对象时传入实参初始化 xx和yy,然后用xx的值初始化Point类的数据成员X,用yy的值初始化数据成员Y

#include <iostream>

class point
{
public:
    point(int xx, int yy);
private:
    int x;
    int y;
};

point::point(int xx, int yy) :x(xx), y(yy)
{
    //用xx和yy初始化成员变量x和y
    //相当于在构造函数内部写了x = xx;和 y = yy;
    std::cout << "x = " << x << std::endl;
    std::cout << "y = " << y << std::endl;
}

int main()
{
    point p(6, 9);
    return 0;
}

组合类构造函数定义:(不能在声明中这样写,因为这是在定义时初始化,声明的时候不需要初始化)

类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表),...
{
  类的初始化
}

参考c++基础语法(构造函数初始化列表)

二、子类向父类传递参数

#include <iostream>
using namespace std;

class ParentClass
{
public:
    //ParentClass()
    //{
    //    cout << "Parent: non-parameter constructor\n";
    //}
    ParentClass(int a):m_a(a)
    {
        cout << "Parent: Constructor with parameters\ta = " << a << endl;
    }

    //other func  ...
protected:
    int m_a;
};


class ChildClass : public ParentClass
{
public:
    //ChildClass(int b):m_b(b)
    //{
    //    cout << "Child: non-parameter constructor\n";
    //}
    ChildClass(int b) :ParentClass(b), m_b(b)
    {
        cout << "Child: Constructor with parameters\tb = " << b << endl;
    }
protected:
    int m_b;

    //...
};


int main()
{
    ChildClass cc(3);

    return 0;
}

如果基类没有无参构造函数,不使用初始化列表向基类传递参数进行构造父类是会报错的。

三、c++子类在继承构造函数有参数的父类时为什么要往父类传参?

ChildClass::ChildClass(int a):ParentClass(a)

父类构造的时候需要参数,子类继承的是父类,没有参数父类的构造函数无法执行。传过去的参数用于父类的构造函数执行(通俗的说,一般用于初始化父类的成员变量等)。参数是传给父类的构造函数的。换而言之,父类的成员变量的初始化时保存了这个变量;或者用于父类实例化时需要一次性使用的参数(比如,对话框尺寸、指定类中的枚举类型等)。

参考百度知道回答

posted @ 2020-11-27 17:11  滴哒哒哒  阅读(61)  评论(0编辑  收藏  举报