22.12.12 Qt day1 重打代码加注释

1.将QT文件调用顺序熟悉- -遍
2.将QT项目中,每个文件的每行代码,自行注释- -遍
3.重新手动实现对象树模型

#include <iostream>                   //输入输出库
#include<list>                        //向量的删除插入,链表的插入删除库


using namespace std;            //释放std的命名空间

class Object                     //类名是objict的父类
{
    public:                           //权限公有
    list<Object *> child;          //子组件链表,带指针的链表child
public:                                   //权限公有
    Object(Object *parent = nullptr)  //构造函数  形参是父组件的指针,而且是空指针
    {
        if(parent != nullptr)       //父组件存在
        {
            //说明创建对象时,给定了父组件,说明要将自己的地址放到父组件的孩子链表中
            parent->child.push_back(this);      //child链表的尾插,插上parent地址,是objict指定的当前对象的地址
        }
    }

    virtual ~Object()          //将所有的子组件释放//析构函数  释放构造函数里链表的指针的空间
    {
        for(auto p = child.begin(); p!=child.end(); p++)  //一个指针p ,指向child链表的头和尾
        {
            delete *p;          //释放指针
        }
    }
};

//派生类
class A : public Object       //类的继承   A继承了父类object成为了子类
{

public:
    A(Object *parent = nullptr)    //  父类的指针父指针为空
    {
        if(parent != nullptr)
        {
            parent->child.push_back(this);    //父指针在链表里的地址是类的当前地址
        }

        cout<<"A::构造函数"<<endl;         //A有了构造函数
    }


    virtual ~A()
    {
        cout<<"A::析构函数"<<endl;    //释放指针
    }
};


class B : public Object               //再继承一个类对象B
{

public:
    B(Object *parent = nullptr)
    {
        if(parent != nullptr)
        {
            parent->child.push_back(this);
        }

        cout<<"B::构造函数"<<endl;
    }


    virtual ~B()
    {
        cout<<"B::析构函数"<<endl;
    }
};


int main()
{
    A w;             //在栈区申请空间,相当于自己的MyWnd       //局部变量是栈区系统生成与释放生命周期短

    B *btn = new B(&w);    //delete  btn;  //申请的自定义空间来自堆区,所以要手动释放
   // delete  btn;           //注释了就是&w,A中的类对象,引用了A  不注释就是也是A中的类对象不过可以先释放

    system("color 17");
    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值