1.封装独占智能指针——unique_ptr
#include <iostream>
#include <utility> // For std::move
// 命名空间
namespace custom_memory
{
template <typename T>
class myPtr
{
public:
// 使用初始化列表进行初始化
explicit myPtr(T* p = nullptr) noexcept : m_ptr(p) {}
// 析构函数
~myPtr() noexcept {
delete m_ptr;
}
// 重载解引用操作符
T& operator*() const {
return *m_ptr;
}
// 重载成员访问操作符
T* operator->() const noexcept {
return m_ptr;
}
// 禁止拷贝构造
myPtr(const myPtr&) = delete;
// 禁用拷贝赋值操作
myPtr& operator=(const myPtr&) = delete;
// 移动构造函数
myPtr(myPtr&& other) noexcept : m_ptr(other.m_ptr)
{
other.m_ptr = nullptr;
}
// 移动赋值操作符
myPtr& operator=(myPtr&& other) noexcept
{
if (this != &other) {
delete m_ptr;
m_ptr = other.m_ptr;
other.m_ptr = nullptr;
}
return *this;
}
private:
T* m_ptr; // 成员变量命名
};
} // namespace custom_memory
//类命名
class Person {
public:
std::string name;
Person() : name("Unknown") { std::cout << name << " 构造函数" << std::endl; }
explicit Person(std::string n) : name(std::move(n))
{
std::cout << name << " 构造函数" << std::endl;
}
~Person() { std::cout << name << " 析构函数" << std::endl; }
};
//*************************主程序****************************
int main()
{
custom_memory::myPtr<Person> ptr1(new Person("hello"));
std::cout << "ptr1 name = " << ptr1->name << std::endl;
Person* rawPtr = new Person("nihao");
custom_memory::myPtr<Person> ptr2(rawPtr);
std::cout << "ptr2 name = " << ptr2->name << std::endl;
ptr2 = std::move(ptr1);
std::cout << "ptr2 name = " << ptr2->name << std::endl;
return 0;
}
2.qt实现登录界面(不能推拽)
#include "widget.h"
#include "ui_widget.h"
#include<QIcon>
#include<QLabel>
#include<QLineEdit> //行编辑器
#include<QPixmap> //图标类
#include<QMovie> //动图类
#include<QPushButton> //按钮
#include<QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//1>尺寸设置
//设置登录页面尺寸
this->resize(400,300);
//固定页面尺寸
this->setFixedSize(500,400);
//2>组件标识
//组件名称设置
this->setWindowTitle("QQ");
//窗体图标
this->setWindowIcon(QIcon("C:\\Users\\你好.幸会\\Desktop\\1.png"));
//*********************** 按钮***************************
QPushButton *btn1 = new QPushButton; //调用无参构造,构造一个按钮
btn1->setParent(this); //将自定义的界面当作按钮类的父组件
btn1->setText("安全登录"); //设置按钮文本内容
btn1->resize(90,40); //设置按钮大小
btn1->move(170,270); //移动按钮位置
btn1->setStyleSheet("background-color:skyblue;"); //设置样式表
QPushButton *btn2 = new QPushButton; //调用无参构造,构造一个按钮
btn2->setParent(this); //将自定义的界面当作按钮类的父组件
btn2->setText("取消登录"); //设置按钮文本内容
btn2->resize(90,40); //设置按钮大小
btn2->move(btn1->x()+110,btn1->y()); //移动按钮位置
btn2->setStyleSheet("background-color:skyblue;"); //设置样式表
//****************************行编辑器设置************************
//设置行编辑器1
QLineEdit *edit1 = new QLineEdit;
edit1->setParent(this); //指定父组件
edit1->resize(200, 30); //重新设置大小
edit1->move(170,200);
//设置行编辑器2
QLineEdit *edit2 = new QLineEdit;
edit2->setParent(this); //指定父组件
edit2->resize(200, 30); //重新设置大小
edit2->move(edit1->x(),edit1->y()+35); //设置位置
edit2->setEchoMode(QLineEdit::Password); //不显示输入
//***********************图标编辑器设置*************************
//设置qq图标
QLabel *lab1 = new QLabel;
lab1->setParent(this); //设置父组件
lab1->setText("账号:"); //设置文本内容
lab1->move(110,205); //设置坐标位置
//lab1->resize(30,30);
// lab1->setPixmap(QPixmap("C:\\Users\\你好.幸会\\Desktop\\11.jpg"));
// lab1->setScaledContents(true);
QLabel *lab2 = new QLabel;
lab2->setParent(this); //设置父组件
lab2->setText("密码:"); //设置文本内容
lab2->move(110,240); //设置坐标位置
// lab2->resize(30,30);
// lab2->setPixmap(QPixmap("C:\\Users\\你好.幸会\\Desktop\\2.jpg"));
// lab2->setScaledContents(true);
//调用有有参构造,指定父组件,构造一个lab
QLabel *lab3 = new QLabel(this);
lab3->resize(500,180);
//动图设置
//创建一个movie对象
QMovie *movie=new QMovie("C:\\Users\\你好.幸会\\Desktop\\2.gif");
//将动图对象放入到标签中
lab3->setMovie(movie);
//让动图动起来
movie->start();
//让标签内容自适应大小
lab3->setScaledContents(true);
//账号与密码
connect(btn1,&QPushButton::clicked,[=](){
if(edit1->text()==edit2->text())
qDebug()<<"登录成功!";
else
qDebug()<<"账号或密码错误,登录失败!";
});
//取消登录btn2
connect(btn2,&QPushButton::clicked,[=](){
this->close();
});
}
Widget::~Widget()
{
delete ui;
}
思维导图