首页 > 编程语言 >c++笔记——类模板

c++笔记——类模板

时间:2023-04-17 10:55:45浏览次数:34  
标签:笔记 类型 c++ TEST using include class 模板

类模板的几个简单测试例程

几个要点:

(1)类模板类型,在实例化时需要显式类型名称

(2)已经显式类型后,传入的参数如果不是相应类型,则会发生强制转换

(3)在类外定义的成员函数,需要加上模板参数列表和类作用域,且类作用域带类型列表

(4)多个参数模板时,可以在函数中使用其中若干个,不用全部都使用。

(5)用using来重命名一个模板

//
// Created by ht on 2023/4/17.
//

#ifndef TEST_THREAD_TEST_CLASS_H
#define TEST_THREAD_TEST_CLASS_H

#include <iostream>
#include <vector>
#include<typeinfo>
#include<cxxabi.h>
using namespace std;

template <typename T>
class A{
public:
    A() = default;
    ~A() = default;

    void fun(T a);


};

template<typename T>
void A<T>::fun(T a) {
    cout << "a = " << a << endl;
}

template<typename M, typename N>
class B{
public:
    B(){
        cout << "this is B constor" << endl;
    }

    ~B() = default;

    M a;
    N b;
    void fun2(M m, N n, int c){
        cout << "this is fun2 " << endl;
    }

    void fun3(int k, N t);
};

//这里还需要在fun3前面加上类型模板和类型作用域,也支持只传一个类模板参数,且会执行隐式类型转换
template<typename M, typename N>
void B<M, N>::fun3(int k, N t) {
    cout << "this is fun3 " << endl;
    cout << "N t = " << t << endl;

    cout << "N type : "<< abi::__cxa_demangle(typeid(t).name(),0,0,0 ) << endl;
}


//由于类模板不是一个类型,不能定义一个typedef引用一个模板
template <typename T> using twin = pair<T, T>;

#endif //TEST_THREAD_TEST_CLASS_H

 

 

主函数

#include "test_class.h"
int main(){

//class template
    //A a;//错误
    A<int> a;  //需要显式模板类型
    a.fun(3);

    //测试多个类型模板参数
    B<int, double> b;
    b.a = 1;
    b.b = 2.1;
    //这里b定义的第二参数是double,但是当传入整形2时,会发生类型转换成double
    b.fun3(2, 2);

    //测试using
    twin<string> author("huang", "ting");

    return 0;
}

 

标签:笔记,类型,c++,TEST,using,include,class,模板
From: https://www.cnblogs.com/havain/p/17325090.html

相关文章

  • TK笔记
    1、@Transactional(readOnly=true)代表当前事务只读,不可写;2、Springboot项目开启事务不是必须添加@EnableTransactionManagementhttps://zhuanlan.zhihu.com/p/569159313可以打开org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration已有自动添......
  • SoSdp 学习笔记
    SoSdp用来解决这种问题:对于非负整数\(i\),\(K\),定义布尔型二元运算\(i\subseteqK\),可以以下四种等价角度理解:\(i\operatorname{bitand}K=i\)。\(\operatorname{bitand}\)是按位与的意思。同一个二进制位上,\(i\)的这一位小于等于\(K\)的这一位。同一个二进制位上,\(......
  • Nacos笔记(四):Nacos集群搭建
    Nacos集群部署的准备工作-Nacos持久化已完成,详见: Nacos笔记(三):Nacos配置持久化,下面介绍Nacos的集群部署。部署三个nacos节点:nacos、nacos01、nacos02。1、设置集群配置文件1.1、复制集群配置文件cpcluster.conf.examplecluster.conf1.2、修改集群配置在clus......
  • 【进阶12】【自学笔记】Python单例模式实现的几种方式
    一、单例模式定义单例模式是一种常用的创建型设计模式,它保证一个类只有一个实例,并提供一个全局的访问点。二、实例展示实例1:classSingleton:_instance=Nonedef__new__(cls):ifcls._instanceisNone:cls._instance=super().__new__(......
  • C++学习 第五天
    今日内容:用户登录注册系统 用户登录注册系统创建cpp文件并声名函数:创建结构体头文件:导入头文件:定义注册函数:初始化用于输入信息的局部变量 判断输入的性别是否正确实例当前注册的对象 并将注册的用户信息存储在全局变量中(存贮在数据库中)优化性别判断......
  • C++-template class-模板类
    C++-templateclass-模板类【C++高级教程,C++类模板一次讲透,必须收藏!】https://www.bilibili.com/video/BV1v84y1x7Qp/?share_source=copy_web&vd_source=3809390a14c335e7731c9e076c03eeba类模板概念类模板是用于生成类的模板。在编译阶段,编译器会根据类模板的使用情况创建......
  • C++ Part1
    C++是在C语言的基础上发展而来的,解决了C语言中存在的一些明显的问题。本文针对C语言存在的问题,引出C++中的解决方案,以对C++的语法进行说明和分析。命名空间域的概念可以将C++中的域理解为作用域。C++标准规定:使得特定名字保持有效的那些可能并不连续的程序文本就是该名字的作用域。......
  • 《全数据时代的炼金师》读书笔记(二)
    第四章数据炼金策略一,三大基本策略1,新算法策略2,多元化策略3,替代化策略二,策略与反应1,对于问卷调查过程中冷冰冰的问与答,被调查者能否提供真实的数据与信息,还是值得推敲的。尤其是被调查者的动机、情感和内在的一些想法,往往很难通过一系列的选择题和打分题来获取。2,市场研......
  • 《全数据时代的炼金师》读书笔记(一)
    读书笔记——《全数据时代的炼金师》顾家峰著,1~3章第一章  大数据的冲击一  数据的起源于发展数据的3条特征收集和分析数据是为了解决问题调查与统计是基础数据分析与挖掘的目的是价值发现  从古至今,数据的核心价值是不变的——最终目标就是要从数据中发现价值,找出事......
  • C++20 Advent of Code 可见树 Day 8: Treetop Tree House
    C++20AdventofCode可见树Day8:TreetopTreeHouseDay8-AdventofCode2022#include<iostream>#include<vector>#include<fstream>#include<string>#include<ranges>#include<numeric>#include<algorithm>#in......