C++模版类

文章目录

  • class与typename区别
      • `template<class NameType, class AgeType>`
      • `template<typename T>`
      • `class` vs `typename`
  • 基本代码实现

class与typename区别

在 C++ 中,template<class NameType, class AgeType>template<typename T> 都是模板声明,但它们在模板参数的数量和类型上有所不同。关键字 classtypename 在这里的使用上基本相同,都用于声明模板参数类型。

template<class NameType, class AgeType>

  1. 含义:这是一个模板声明,它定义了一个带有两个类型参数的模板。NameTypeAgeType 是这两个类型参数的占位符,可以被任意类型替换。

  2. 使用场景:这种形式通常用于需要两种不同类型参数的情况。例如,你可能有一个类,其中需要两种不同类型的成员变量或方法参数。

template<typename T>

  1. 含义:这也是一个模板声明,但它只定义了一个单一的类型参数 TT 是一个类型参数的占位符,可以被任意类型替换。

  2. 使用场景:这种形式用于你的类或函数只需要一种类型参数的情况。例如,一个泛型容器类,其中所有元素都是同一类型 T

class vs typename

  • 基本上无区别:在模板声明中,classtypename 关键字可以互换使用。它们都表示后面跟随的是一个类型参数。

  • 历史上的区别:最初,在 C++ 的早期版本中,只有 class 关键字被用于这种情况。typename 关键字后来被引入,以使得模板的意图更加清晰,特别是在表示模板参数可能不仅仅是类类型的情况下。

  • 选择使用:尽管 classtypename 在这里可以互换使用,但在某些情况下(比如模板参数可能不是类类型时),使用 typename 可能会使代码的意图更清晰。然而,这主要取决于个人或团队的编码风格。

总结来说,template<class NameType, class AgeType>template<typename T> 都用于定义模板,但前者接受两个类型参数,而后者只接受一个。classtypename 在这种上下文中是等价的,都用于声明类型参数。

基本代码实现

#include <bits/stdc++.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;template<class NameType,class AgeType>
class Person
{
public:Person(NameType name,AgeType age){this->mName = name;this->mAge = age;}void showPerson(){cout << "name: " << this->mName << "\nage: " << this->mAge << endl; }
public:NameType mName;AgeType mAge;
};template<typename T>
class Girl : public Person<string,int>
{
public:Girl(T a,string b,int c) : Person<string,int>(b,c){this->mHigh = a;}void showGirl();
public:T mHigh;
};template<typename T>
void Girl<T>::showGirl()
{this->showPerson();// cout << "Girl high: " << this->mHigh << endl;printf("Girl high: %6.3f\n",this->mHigh);
}void DoBusiness(Person<string,int> &p)
{p.mName = "HI";p.mAge += 100;
}void test1()
{Person<string,int> P1("Nike",200);P1.showPerson();DoBusiness(P1);P1.showPerson();
}void test2()
{   Girl<double> g1(195.8,"xiaohong",22);g1.showGirl();}int main(){test2();return 0;
} 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/295620.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Downie 4 中文

Downie 4是一款备受推崇的视频下载工具&#xff0c;以其高效、便捷的特点在广大用户中获得了良好的口碑。这款工具不仅支持从各种不同的网站上下载视频&#xff0c;还具备了智能化、多线程下载的优势&#xff0c;让用户能够快速地获取所需的视频资源。 首先&#xff0c;Downie…

非阻塞 IO(NIO)

文章目录 非阻塞 IO(NIO)模型驱动程序应用程序模块使用 非阻塞 IO(NIO) 上一节中 https://blog.csdn.net/tyustli/article/details/135140523&#xff0c;使用等待队列头实现了阻塞 IO 程序使用时&#xff0c;阻塞 IO 和非阻塞 IO 的区别在于文件打开的时候是否使用了 O_NONB…

单词接龙[中等]

一、题目 字典wordList中从单词beginWord和endWord的 转换序列 是一个按下述规格形成的序列beginWord -> s1 -> s2 -> ... -> sk&#xff1a; 1、每一对相邻的单词只差一个字母。 2、对于1 < i < k时&#xff0c;每个si都在wordList中。注意&#xff0c;beg…

Android模拟器的安装和adb连接

一、前置说明 APP 自动化可以使用真机进行测试&#xff0c;也可以使用模拟器来模拟安卓设备。我们可以根据个人喜好安装模拟器&#xff0c;个人推荐安装两款模拟器&#xff1a;网易 MuMu 模拟器、夜神模拟器。 MuMu模拟器可以支持 Android 12 版本&#xff0c;优点是&#xf…

微信小程序开发学习(上强度):从0开始写项目

前置知识 1、配置插件 微信小程序 基础模板引入sass的两种方法_微信小程序使用sass-CSDN博客 之后在对应页面里新建一个scss文件&#xff0c;写css 2、注册小程序&#xff0c;有个自己的appid&#xff0c;不用测试号了 5.1.注册小程序账号获取appid及个人和企业版差异_哔哩…

Vue3中使用props和emits详解

前言 在Vue3中&#xff0c;父子组件之间的数据传递是一个常见的需求。本文将介绍如何在Vue3中传递对象&#xff0c;并且在子组件中访问和修改父组件对象中的属性值&#xff0c;以及子组件如何调用父组件中的方法。 在 Vue 3 中&#xff0c;父子组件之间传值有以下作用&#xf…

实用干货:公司规定所有接口都用 POST请求,为什么?

大家好&#xff0c;我是大澈&#xff01; 本文约1000字&#xff0c;整篇阅读大约需要2分钟。 感谢关注微信公众号&#xff1a;“程序员大澈”&#xff0c;免费领取"面试礼包"一份&#xff0c;然后免费加入问答群&#xff0c;从此让解决问题的你不再孤单&#xff01…

可视化开发

可视化开发 数据可视化 交互式可视化 文章目录 可视化开发前言一、可视化开发二、Python数据可视化大屏GIS图像智能识别处理软件开发三、可视化开发必备总结前言 可视化开发可以帮助开发者通过图形化界面和拖放操作来创建、编辑和测试应用程序。使用这些工具,开发者可以提高开…

python爬虫入门,零基础适用

文章目录 什么是爬虫&#xff1f;它能解决什么问题&#xff1f;爬虫的分类&#xff1a;通用网络爬虫&#xff1a;聚焦网络爬虫&#xff1a; 企业获取数据的方式&#xff1a;Python做爬虫的优势&#xff1a;爬虫违法么&#xff1f; http 与 https 协议&#xff1a;什么是协议&am…

如何在本地安装Flask并将其web界面发布到公网上远程访问协同开发

目录 前言 1. 安装部署Flask 2. 安装Cpolar内网穿透 3. 配置Flask的web界面公网访问地址 4. 公网远程访问Flask的web界面 前言 本篇文章讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网上并进行远程访问。 Flask是目前十分流行的web框架&#xff0c;…

C# Onnx yolov8n csgo player detection

目录 效果 模型信息 项目 代码 下载 C# Onnx yolov8n csgo player detection 效果 模型信息 Model Properties ------------------------- date&#xff1a;2023-12-22T15:01:08.014205 author&#xff1a;Ultralytics task&#xff1a;detect license&#xff1a;AGPL-…

Open3D点云处理简明教程

推荐&#xff1a;用NSDT编辑器快速搭建可编程3D场景 这是“激光雷达入门”文章的延续。 在这篇文章中&#xff0c;我们将查看用于处理点云的 python 库和 Open3D 数据结构&#xff0c;执行可视化并操作点云数据&#xff0c;以便进行后续的分析处理。 如果你需要快速预览3D点云…