1.对象树模型:程序运行结束时,父对象被析构时子对象也会被析构。
程序实现:
#include <iostream>
#include <list>
using namespace std;
//父类
class ObjTree
{
private:
list<ObjTree *> childList; //子对象的指针链表
public:
ObjTree(ObjTree *parent=NULL)
{
if(parent != NULL)
parent->childList.push_back(this);
}
virtual ~ObjTree()
{
for(auto it=childList.begin();it!=childList.end();it++)
{
delete *it;
}
}
list<ObjTree *> &child(){
return childList;
}
};
//子类
class A:public ObjTree
{
public:
A(ObjTree *parent=NULL)
{
if(parent!=NULL){
parent->child().push_back(this);
}
cout<<"A的构造"<<endl;
}
virtual ~A()
{
cout<<"A的析构"<<endl;
}
};
class B:public ObjTree
{
public:
B(ObjTree *parent=NULL)
{
if(parent!=NULL){
parent->child().push_back(this);
}
cout<<"B的构造"<<endl;
}
virtual ~B()
{
cout<<"B的析构"<<endl;
}
};
int main()
{
B b;
A *a=new A(&b);
return 0;
}
2.功能实现:
代码段;
代码.h文件:
#ifndef MYWND_H
#define MYWND_H
#include <QWidget>
#include <QPushButton>
#include <QTextToSpeech>
class Mywnd : public QWidget
{
Q_OBJECT
public:
Mywnd(QWidget *parent = nullptr);
~Mywnd();
//定义三个按钮
QPushButton* btn1;
QPushButton* btn2;
QPushButton* btn3;
};
#endif // MYWND_H
#include "mywnd.h"
Mywnd::Mywnd(QWidget *parent)
: QWidget(parent)
{
//设置弹出窗口大小
this->setFixedSize(800,800);
btn1 = new QPushButton(" ",this);
btn1->resize(75,30); //重新设计按钮大
btn1->move(0,height()/2); //放置按钮的位置
btn2 = new QPushButton("关闭",this);
btn2->resize(btn1->size());
btn2->move(btn1->width(),height()/2);
btn3 = new QPushButton("点击",this);
btn3->resize(btn2->size());
btn3->move((btn1->width()+btn2->width()),height()/2);
// connect(btn1,&QPushButton::clicked,[&](){
// emit singal_1();
// });
connect(btn1,&QPushButton::clicked,this,[&](){
btn1->setText((btn2->text()));
btn1->setEnabled(false);
});
connect(btn2,&QPushButton::clicked,this,[&](){
this->close(); //关闭整个程序
});
connect(btn3,&QPushButton::clicked,this,[&](){
btn1->setEnabled(true);
});
}
Mywnd::~Mywnd()
{
}
功能现象:
点击按钮1,读取按钮二中内容,同时按钮1停滞.
点击按钮三,按钮1重启。
点击按钮二,程序结束。