在父类的构造函数中构造成员对象 C++
Constructing a member object inside the parent class' constructor in C++
我目前正在为我正在从事的一个项目学习OOP(我在高中,有一些c++经验;这是我的第三个"大型"(>3个月)C ++项目。我已经弄清楚了C++类的基础知识,并设法为该项目制作了一些类。
所以这些是我的页面.h标题:
class cl_Page{
public:
cl_Page(cl_LessonMoment *parent_param);
cl_Page(cl_SoftRoot *parent_param);
int parent_type;
cl_LessonMoment *parent_lmoment;
cl_SoftRoot *parent_softroot;
char id[256];
//<content>
//Backgrounds.
str_Color bgcolor;
cl_Image bgimage;
//Actual content
vector<cl_Textbox> textboxes;
vector<cl_Button> buttons;
vector<cl_Image> images;
//</content>
};
(包括警卫等不在这里,但他们在我的项目中)
这是我的页面.cpp:
cl_Page::cl_Page(cl_LessonMoment *parent_param){
parent_lmoment = parent_param;
parent_type = 1;
id[0] = ' ';
//bgimage(NULL);
SetColor(bgcolor, 0x000000ff);
}
(另一个构造函数类似,它只是设置了不同类型的父级)
我的问题是我想在我的cl_Page构造函数中调用构造函数到 bgimage(它是类类型cl_Image)。如果我尝试这样做(取消注释构造函数中的行),显然它不起作用。
所以是的,我现在如何调用构造函数?我真的需要构造每个成员以及cl_Page对象。
如果要
在构造函数中创建bgImage
对象cl_Page
它必须是指针(1),或者应该使用构造函数的初始化列表(2),在这种情况下,这可能是更好的解决方案。
1. - 字段是指向cl_Image的指针
bgImage = new cl_Image(nullptr);
2. - 构造函数初始化列表的使用
cl_Page::cl_Page(cl_LessonMoment *parent_param) :
bgImage(nullptr)
{
parent_lmoment = parent_param;
parent_type = 1;
id[0] = ' ';
SetColor(bgcolor, 0x000000ff);
}
在那里你可以阅读更多关于构造函数初始化列表的信息:http://www.cprogramming.com/tutorial/initialization-lists-c++.html
您可以使用成员初始化列表初始化变量:
cl_Page::cl_Page(cl_LessonMoment *parent_param)
: bgImage(NULL)
{
parent_lmoment = parent_param;
parent_type = 1;
id[0] = ' ';
SetColor(bgcolor, 0x000000ff);
}
实际上,这是在构造函数中设置数据的首选方法。
cl_Page::cl_Page(cl_LessonMoment *parent_param)
: bgImage( nullptr )
{
parent_lmoment = parent_param;
parent_type = 1;
id[0] = ' ';
SetColor(bgcolor, 0x000000ff);
}
您需要像这样初始化您的成员:
cl_Page::cl_Page(cl_LessonMoment *parent_param)
: parent_lmoment(parent_param)
, parent_type(1)
, bgimage(NULL)
{
id[0] = ' ';
SetColor(bgcolor, 0x000000ff);
}
初始化构造函数头中的指针不是必需的,但我仍然推荐它。我还建议用 0 初始化另一个指针,如果您遇到错误,它可能会对您有所帮助;-)
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- C++是否有定义的方法来传递指向类的成员对象的成员函数的指针
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 声明成员对象而不调用其默认构造函数
- 指向成员对象的指针 - 中断线程
- 是否有更好的方法来封装成员对象可以访问的共享存储池?
- 应该在成员对象上调用析构函数
- 调用成员对象的构造函数
- 将 const 类型引用对象注册为类成员对象C++
- 修改类 c++ 中的成员对象
- 从成员对象调用方法
- 从对象调用成员对象,错误:引用非常量值的初始值必须是左值
- 构造函数,成员对象
- 不能使外部类成为内部类内的成员对象
- 使用从另一个类继承的类的对象初始化成员对象
- 如何避免需要在初始化列表中初始化成员对象
- 初始化具有参数的类成员对象的正确方法
- 将指针添加到成员对象中的指针动态阵列
- C 将成员对象函数分配给类成员功能