首页 > 编程语言 >c++模板相关学习--泛型编程

c++模板相关学习--泛型编程

时间:2023-07-08 20:34:20浏览次数:34  
标签:cout -- void c++ class template 泛型 public 模板

 

类模板基础

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include <string>
template<class NAMETYPE, class AGETYPE = int > //类模板中 可以有默认参数
class Person
{
public:
    Person(NAMETYPE name, AGETYPE age)
    {
        this->m_Name = name;
        this->m_Age = age;
    }

    void showPerson()
    {
        cout << "姓名: " << this->m_Name << " 年龄: " << this->m_Age << endl;
    }
    NAMETYPE m_Name;
    AGETYPE m_Age;
};

void test01()
{
    
    //类模板和函数模板区别:
    //1、类模板不可以使用自动类型推导,只能用显示指定类型
    //2、类模板中 可以有默认参数
    //Person p1("孙悟空", 100);

    Person<string > p1("孙悟空", 100);
    p1.showPerson();
}

int main(){

    test01();

    system("pause");
    return EXIT_SUCCESS;
}

 

类模板中的成员函数创建时机

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

class Person1
{
public:
    void showPerson1()
    {
        cout << "Person1 show 调用" << endl;
    }
};

class Person2
{
public:
    void showPerson2()
    {
        cout << "Person2 show 调用" << endl;
    }
};


//类模板中的成员函数  并不是一开始创建的,而是在运行阶段确定出T的数据类型才去创建
template<class T>
class MyClass
{
public:
    void func1()
    {
        obj.showPerson1();
    }
    void func2()
    {
        obj.showPerson2();
    }

    T obj;
};

void test01()
{
    MyClass <Person2> p1;
    //p1.func1();
    p1.func2();
}

int main(){

    test01();

    system("pause");
    return EXIT_SUCCESS;
}

 类模板做函数参数

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include <string>
template<class T1, class T2> //类模板中 可以有默认参数
class Person
{
public:
    Person(T1 name, T2 age)
    {
        this->m_Name = name;
        this->m_Age = age;
    }

    void showPerson()
    {
        cout << "姓名: " << this->m_Name << " 年龄: " << this->m_Age << endl;
    }
    T1 m_Name;
    T2 m_Age;
};

//1、指定传入类型
void doWork(Person <string, int>&p)
{
    p.showPerson();
}

void test01()
{
    Person <string, int>p("孙悟空", 999);//这是类模板创建对象操作
    doWork(p);
}


//2、参数模板化
template<class T1, class T2>
void doWork2(Person <T1, T2>&p)
{
    cout << "T1数据类型: " << typeid(T1).name() << endl;
    cout << "T2数据类型: " << typeid(T2).name() << endl;
    p.showPerson();
}

void test02()
{
    Person<string, int>p("猪八戒", 998);
    doWork2(p);
}


//3、整个类 模板化
template<class T>
void doWork3( T &p)
{
    cout << "T的数据类型: " << typeid(T).name() << endl;
    p.showPerson();
}

void test03()
{
    Person<string, int>p("唐僧", 10000);
    doWork3(p);
}

int main(){

    //test01();
    //test02();
    test03();

    system("pause");
    return EXIT_SUCCESS;
}

 

类模板继承相关问题

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

template<class T>
class Base
{
public:
    T m_A;
};

//必须要指定出父类中的T数据类型,才能给子类分配内存
class Son :public Base<int>
{

};



template<class T>
class Base2
{
public:
    T m_A;
};

template<class T1 ,class T2>
class Son2 :public Base2<T2>
{
public:

    Son2()
    {
        cout << typeid(T1).name() << endl;
        cout << typeid(T2).name() << endl;
    }

    T1 m_B;
};

void test01()
{
    Son2 <int, double> s;

}

int main(){
    
    test01();

    system("pause");
    return EXIT_SUCCESS;
}

 

标签:cout,--,void,c++,class,template,泛型,public,模板
From: https://www.cnblogs.com/chaojibaidu/p/17537794.html

相关文章

  • 7月8日
    7月8日早上六点半起床,上了个厕所之后就出门溜达去了,在家旁边转悠了一个小时才回的家,然后早起也没啥事做,就找同学聊了会儿天,今天不想做作业就看了一会儿黑马程序员的视频,然后就是打了半天游戏,我弟作业都没管,等着下午再说,中午还是要做饭的,等下午又开始当起了快乐肥宅,在家宅着打游戏......
  • 泪目!跳槽太不容易,蚂蚁金服三轮面试,四个小时灵魂拷问
    本人是双非院校科班研究生,Java开发3年工作经验,以下是最近的面试总结:先说下我的面试准备经历,为了保证自己简历有较大一定的概率通过筛选,我在2018毕业后面试了多家公司,去了一家上海一家小公司一直工作到今年5月。和往年相比,今年的金三银四看上去不是那么顺利,可能和我的准备不足有......
  • 暑假周记(7.8)
    今天周六写点啥呢,亲手参与可乐鸡翅的制作步骤,嗯,对。final关键字有什么用?用于修饰类、属性和方法;被final修饰的类不可以被继承被final修饰的方法不可以被重写被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的fin......
  • Express框架
    用内置http模块创建服务器创建server.js文件,代码如下:consthttp=require('http');consthostname='localhost';constport=3000;constserver=http.createServer((req,res)=>{res.statusCode=200;res.setHeader('Content-Type'......
  • IOI 2023 国家队集训@威海
    Day1CCO2023.T2:\(k=1\)好做的,\(k=3\)能遍历整颗树。\(k=2\)需要一个非常巨大分类讨论的dp。T3:有趣的题。首先通过Hall定理,去除掉一定没有用的长边。然后可以猜测答案一定为剩下的边数\(cnt/3\)。Day2T2:通信,还没做。T3:先HalinGraphTreeDecomposition一下,然后......
  • 查字符类型转换date类型值时报错“ORA-00904: "GET_INTERNAL_VALUE": invalid identif
    问题描述:查字符类型转换date类型值时报错“ORA-00904:"GET_INTERNAL_VALUE":invalididentifier”,如下所示:数据库:oracle11.2.0.41、异常重现SYS@orcl>selectget_internal_value('DF2304290000748902')fromdual;selectget_internal_value('DF2304290000748902......
  • postgres查看数据库大小,表大小
    环境centos7,postgres11查看pg中各个数据库大小selectpg_database.datname,pg_size_pretty(pg_database_size(pg_database.datname))ASsizefrompg_database;查看pg某个数据库中表占用的大小先选中某个数据库SELECTtable_name,pg_size_pretty(table_size)AStabl......
  • 升级Elasticsearch到8.7.1版本,我给自己挖了很多坑......
    转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。最近因为某些原因,需要将ES升级到8.7.1版本。之前用的ES版本比较老了,这次部署新版本ES,发现变化蛮大的,一小心又踩了一些坑,还给自己挖了一些坑......1.java版本不符合需求,es启动失败报错内......
  • 淘宝直播下载新版教程 一建轻松下载淘宝实时直播和回放视频到本地 通用视频下载器
    2023新版教程来啦!一建轻松下载淘宝直播视频到本地,直播回放也可以下载,支持多任务同时进行没有任务数量限制,操作非常简单最近通用视频下载器软件更新了,很多新用户不知道怎么操作,所以今天给大家出一期教程这样新用户操作起来也会事半功倍!好的,不说废话!我们直接上教程!通用视频下载器可以......
  • 第1章信息化发展|软考高项信息系统项目管理师-教程伴读脑图
    第1章信息化发展,一共36页的内容,篇幅中等,难度也是中等(三颗星),读起来虽然有一些枯燥,但是理解起来不难,毕竟技术的含量不是很高,更多是一些高大上的内容。按照我的经验,你可能需要2个小时左右完成本章的通读。第1章信息化发展,一共包含5小节的知识块,分别是“信息与信息化”、“现代化基础设......