初步C++类模板学习笔记

初步C++类模板学习笔记

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

类模板

 

实现:在上课时间的定义给它的一个或多个参数,这些参数代表了不同的数据类型。                              –>抽象的类。

在调用类模板时, 指定參数, 由编译系统依据參数提供的数据类型自己主动产生对应的模板类                   –>详细的类。

 

 

 

类模板的定义

C++的类模板的写法例如以下:

 

template <类型參数表>        //类型參数表的写法就是:class 类型參数1, class 类型參数2, …
class 类模板名
{
    成员函数和成员变量
};

 

类模板里的成员函数, 如在类模板外面定义时,

 

template <型參数表>
返回值类型 类模板名<类型參数名列表>::成员函数名(參数表)
{ 
    ……
}

 

用类模板定义对象的写法例如以下:
类模板名 <真实类型參数表>  对象名(构造函数实际參数表);
假设类模板有无參构造函数, 那么也能够仅仅写:
类模板名 <真实类型參数表>  对象名;

 

 

举例:

 

template <class T1, class T2>
class Pair{
public:
    T1 key;  //keyword
    T2 value;  //值
    Pair(T1 k,T2 v):key(k),value(v) { };
    bool operator < (const Pair<T1,T2> & p) const; 
};

template<class T1,class T2>    //在类外定义 Pair的成员函数 operator <
bool Pair<T1,T2>::operator<( const Pair<T1, T2> & p) const 
{ return key < p.key; }  

Pair类模板的使用:

 

int main()
{
    Pair<string, int> student("Tom",19); 
    //实例化出一个类 Pair<string, int>
    cout << student.key << " " << student.value; 
    return 0;

}

 

 

函数模版作为类模板成员

 

 

#include <iostream>
using namespace std;
template <class T>
class A{
public:
    template<class T2> 
    void Func(T2 t) { cout << t; } //成员函数模板
};
int main(){
    A<int> a;
    a.Func('K'); //成员函数模板 Func被实例化
     return 0;
}

 

类模板与非类型參数

 

 

template <class T, int size>
class CArray{
    T array[size];
public:
    void Print( ) 
    {
        for(int i = 0; i < size; ++i)
        cout << array[i] << endl; 
    }       
};

 

CArray<double, 40> a2;
CArray<int, 50> a3;

注意:
CArray<int,40>和CArray<int,50>全然是两个类
这两个类的对象之间不能互相赋值

 

 

 

类模板与继承

 

 

普通类从模板类派生

 

template <class T>
class A { T v1;  int n; };
class B:public A<int> { double v;  };// 类A是个类模板。A<int>是模板类
int main() { 
    B obj1; 
    return 0;
}

 

类模板从模板类派生

 

template <class T1, class T2>
class A { T1 v1; T2 v2;    };


template <class T>
class B:public  A<int, double> { T v; };
int main() {

     B<char> obj1; return 0;

 }

 

类模板A   ->实例化  模板类A<int,double>  ->派生   类模板B   ->实例化  模板类B<char>

此时B中有成员

        int v1;

        double  v2;

        T v;

 

 

 

 

类模板从普通类派生

 

 

class A {  int v1; };


template <class T>
class B:public A  { T v; };
int main() { 
    B<char> obj1; 
    return 0; 
}

没什么可说的。在继承A的基础上添加了T类型的成员。

 

 

类模板从类模板派生

 

#include <iostream>
using namespace std;
template <class T1, class T2>
class A
{
public:
    T1 v1; T2 v2;
};

template <class T1, class T2>
class B:public A<T1,T2>
{
public:
    T1 v3; T2 v4;
};

int main()
{
    B<int,double> b;
    B<int,double> *pb = &b;
    b.v1 = 1;
    b.v3 = 3;
    b.v2 = 2.2;
    b.v4 = 4.4;
    cout << pb->v1<<endl;
    cout << pb->v2<<endl;
    cout << pb->v3<<endl;
    cout << pb->v4<<endl;

    return 0;
}

要保证当给类模板B实例化的时候。类模板A也随之完毕类型T的实例化。

B<int,double> b 时,B有自身的成员int v3 、double v4 也有继承A<int,double>的成员int v1 和 double v2

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117786.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpstorm mac激活码2021详解【2021.7最新】

    (phpstorm mac激活码2021详解)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlML…

    2022年3月21日
    101
  • Chain of Responsibility职责链[通俗易懂]

    Chain of Responsibility职责链[通俗易懂]职责链 Chain of Responsibility动机模式定义实例结构要点总结笔记动机在软件构建过程中,一个请求可能被多个对象处理.但是每个请求在运行时只能有一个请求者.如果显示指定.将必不可少地带来请求发送者与接收者地紧耦合如何使请求地发送者不需要指定具体地接收者?让请求地接收者自己在运行时决定来处理请求,从而使两者解耦模式定义使多个对象都有机会处理请求 从而避免请求地发送者和接收者之间地耦合关系.将这些对象形成一条链.并沿着这条链传递请求.直到有一个对象处理它为止实例#include&

    2022年8月9日
    2
  • SQL报错注入_报错注入原理

    SQL报错注入_报错注入原理目录1报错注入概述2常用的报错注入命令2.2groupby重复键冲突(count()+floor()+rand()+groupby组合)2.2.1groupby重复键冲突的原理及bug演示2.2.2补充:sql语句解析过程2.3XPATH报错2.3.1extractvalue()函数2.3.2updatexml()函数2.4测试失败的命令3报错注入案例3.1操作环境3.2获取敏感信息3.2.1获取数据库名3.2.2获取表名3.2.3获取字段名3.2.4获取字段内

    2022年9月30日
    0
  • xml语言

    xml语言

    2022年1月11日
    34
  • 算法高级(21)-如何通过IP地址进行定位?[通俗易懂]

    最近项目有一个用户地域分析的需求,现在知道ip字段,需要通过用户的ip查找归属地,我们这里将ip直接转换成对应城市的字符串。一、通过IP库二分查找ip库是从淘宝买的,csdn下载地址:【ip字段国内外均有】ip.txt是ip地址和归属地的规则数据,里面的数据是根据ip地址的十进制从高到低排序。 第一个字段是网段的起始IP地址,第二个字段是网段的结束IP地址, 第三个字段是网段的…

    2022年4月17日
    78
  • 什么叫杂谈(e网杂谈)

    本文基于JDK1.8,使用的收集器为ParNew+CMS前言这篇文章的起因是这样的,在上周五凌晨很苦逼得参加双十一压测值班的时候,有个业务方突然打电话来说我们提供的客户端存在内存泄漏问题导致线上应用持续fullgc,本来已经快要睡着的我立马就精神起来了,一通排查,最终定位到了确实是客户端有个bug会导致部分数据会被一直持有进入老年代之后gc不掉,从而就导致了老年代的频繁gc,具…

    2022年4月12日
    82

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号