构造函数初始化列表 组合类构造函数
一、类的构造函数初始化列表
在构造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(形参表),...
{
类的初始化
}
二、子类向父类传递参数
#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)
父类构造的时候需要参数,子类继承的是父类,没有参数父类的构造函数无法执行。传过去的参数用于父类的构造函数执行(通俗的说,一般用于初始化父类的成员变量等)。参数是传给父类的构造函数的。换而言之,父类的成员变量的初始化时保存了这个变量;或者用于父类实例化时需要一次性使用的参数(比如,对话框尺寸、指定类中的枚举类型等)。