欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > QT c++函数模板与类模板的使用

QT c++函数模板与类模板的使用

2024/10/24 9:22:28 来源:https://blog.csdn.net/txwtech/article/details/140205903  浏览:    关键词:QT c++函数模板与类模板的使用

QT c++类模板的使用

#pragma once#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication5.h"class QtWidgetsApplication5 : public QMainWindow
{Q_OBJECTpublic:QtWidgetsApplication5(QWidget *parent = nullptr);~QtWidgetsApplication5();template <typename T>T getMax(T x, T y); //函数模板template <class T>class Txx //类模板{private:T name;public:Txx(T n) :name(n){}T getName(){return name;}};private:Ui::QtWidgetsApplication5Class ui;
};

函数模板实现: 

 

#include "QtWidgetsApplication5.h"
#include "Dll3.h"
#pragma comment (lib,"Dll3.lib")
#include <qmessagebox.h>
#pragma execution_character_set("utf-8")
#include <qdebug.h>QtWidgetsApplication5::QtWidgetsApplication5(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);this->setWindowIcon(QIcon(":/imgs/multi.ico"));int aa= MathFunc::fnAdd(1,2);// QMessageBox::information(this,"title","加法结果:"+QString::number(aa));int aa2 = MathFunc::fnSub(9, 2);// QMessageBox::information(this, "title", "减法结果:" + QString::number(aa2));connect(ui.pushButton_getMax, &QPushButton::clicked, this, [=] {qDebug() << "max value is: " << getMax(3, 2);qDebug() << "max value is: " << getMax(3.3, 2.3);Txx<int> txx(666);//Txx tt2(777);qDebug() << "age value is: " << txx.getName();});
}
template<typename T>inline T QtWidgetsApplication5::getMax(T x, T y)
{return x > y ? x : y;
}QtWidgetsApplication5::~QtWidgetsApplication5()
{}

 Txx为类模板的调用。Txx<int >可以正常调用,Txx tt2(777)这样使用时报错,

因为类的模板参数推导仅在 C++17 之后可用

属性中设置即可

 

C + + 中函数重载和模板之间的区别

在了解 C + + 中的函数重载和模板之间的区别之前,首先要知道 C + + 中的多态性是什么。

多态性意味着具有多种形式。多态性是面向对象编程的一个重要概念。可以将多态性定义为函数或消息以多种形式显示的能力。

C + + 中的函数重载和模板都是 C + + 中多态性的示例,即静态多态。当需要定义执行类似操作的多个函数时,应该使用函数重载。另一方面,当需要定义执行相同操作的多个函数时,应该在 C + + 中使用模板。

C + + 中的函数重载和模板之间最重要的区别之一是模板不能接受不同数量的参数,但重载函数可以接受不同数量的参数

应用:

函数模板:参数个数相同,类型不同,功能相同(如:用于比较)

函数重载:参数个数不同,类型不同,功能不同

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com