2.
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget> //引入头文件
#include<QPushButton>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; } //命名空间的声明
QT_END_NAMESPACE
class Widget : public QWidget //创建继承自QWidget的自定义图形化界面类
{
Q_OBJECT //信号与槽对应的元
signals:
void change();
public slots:
//void on_change_slot(); //自定义的槽函数
public:
Widget(QWidget *parent = nullptr); //构造函数的声明,参数四QWidget*类型的指针
~Widget();
//析构函数
private:
Ui::Widget *ui; //ui界面的指针,可以通过该指针使用ui界面上的组件
QPushButton *btn1; //自定义的组件
};
#endif // WIDGET_H
源文件
#include "widget.h" //引入头文件
#include "ui_widget.h" //引入ui文件生成的C++文件
Widget::Widget(QWidget *parent) //自定义类的定义
: QWidget(parent) //调用父类的有参构造,完成子类从父类继承的成员的初始化
, ui(new Ui::Widget) //给ui指针实例化空间
{
ui->setupUi(this); //调用ui中的类的成员函数
this->btn1 = new QPushButton(this); //为组件分配空间
this->btn1->setText("按钮"); //更改自定义类的组件内容用this指针
ui->clickBtn->setText("按钮2"); //更改ui界面上的组件用ui指针
Widget::~Widget() //自定义类的析构函数的定义
{
delete ui; //将ui指针的内容释放掉
}
测试文件
#include "widget.h" //引入工程中的头文件
#include <QApplication> //引入应用程序的头文件
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //实例化一个应用程序类对象
Widget w; //在栈区,给自定义的类实例化对象
w.show(); //调用展示函数
return a.exec(); //轮询等待处理
}
3.
#include <iostream>
#include <list>
using namespace std;
class Object
{
public:
list<Object *> children; //创建子组件链表
Object(Object* parent=nullptr)
{
if(parent!=nullptr){ //表明创建对象时,给定了父组件
parent->children.push_back(this); //将自己的地址放入父组件的孩子链表中
}
}
virtual ~Object() //释放所有子组件
{
for(auto it=children.begin();it!=children.end();it++){
delete *it;
}
}
};
class A:public Object
{
public:
A(Object* parent=nullptr)
{
if(parent!=nullptr){
parent->children.push_back(this);
}
cout<<"A的构造"<<endl;
}
~A()
{
cout<<"A的析构"<<endl;
}
};
int main()
{
Object obj;
A* a=new A(&obj);
return 0;
}