//类模版语法
#include<iostream>
using namespace std; /*
类模板和函数模板深入理解
1.编译器并不是把函数模板处理成能处理任何类型的函数
2.编译器从函数模板通过具体类型产生不同的函数
3.编译器会对函数模板进行两次编译
4.在声明的地方对模板代码进行编译
5.在调用的地方对参数替换后的代码进行编译 对于类模板原理也是相同
强调2点:
①类模版或者函数模板是c++编译器根据调用对象的类型参数生成对应的类或者函数
也就是说不同的类型参数会产生不同的类和函数
②类模板或者函数模板会进行2次编译
*/ //模板声明---类中的属性参数化
template<typename T>
class Rectangle {
public:
Rectangle(T a,T b){
this->weight = a;
this->height = b;
}
T GetW(){
return this->weight;
}
void SetA(T a);
Rectangle GetSelf();
private:
T weight;
T height;
}; //在类外面实现类中的成员函数
template<typename T>//模板声明
void Rectangle<T>::SetA(T a){
this->weight = a;
} //类模板对象做参数也必须加上参数列表
template<typename T>
void PrintA(Rectangle<T> a){
cout << "我PrintA被调用了!" << endl;
} /*
template<typename T>
Rectangle Rectangle<T>::GetSelf(){
return *this;
}
报错: error C2244 : “Rectangle<T>::GetSelf” : 无法将函数定义与现有的声明匹配
*/ template<typename T>
Rectangle<T> Rectangle<T>::GetSelf(){
return *this;
} void PrintB(Rectangle<int> a){
cout << "我PrintB被调用了!" << endl;
} //类模板的继承
template<typename T>
class Square :public Rectangle<T>{
public:
Square(T a) :Rectangle<T>(a, a){}
}; class Square2 :public Rectangle<int>{
public:
Square2(int a) :Rectangle<int>(a, a){}
}; /*
结论:类模板实现了对数据类型的抽象化,导致c++编译器无法无法确定类对象的大小,
所以在任何地方使用类模板,要么加上模板声明,要是具体化类模板
对于类模板而言 有具体的参数列表才是一个真正的类
Rectangle,c++编译器不认为他是一个类
Rectangle<int> ,c++编译器认为他是一个类
*/ void ProtectA(){
//Rectangle r1;
//报错 error C2955: “Rectangle”: 使用 类 模板 需要 模板 参数列表
/*
本质上的原因是:类本身是一个对象的抽象,声明类的时候并不会分配内存(只有定义对象的时候才会)
类模板又是在类的基础上进一步对数据类型进行抽象化
c++编译器无法确定一个类对象的大小
*/
Rectangle<int> r2(, );
/*
类模板定义对象时,必须加类型参数列表,不然无法确定对象大小
*/
PrintA(r2);
PrintB(r2);
} void ProtectB(){
Square<int> sq1();
Square2 sq();
} void main(){ system("pause");
}

C++ 类模板一(类模板的定义)的更多相关文章

  1. singleton 类模板限制类只能定义一个对象

    singleton 类模板限制类只能定义一个对象 singleton 类模板限制类只能定义一个对象 singleton 类模板限制类只能定义一个对象 ???

  2. [Reprint] C++函数模板与类模板实例解析

    这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下   本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...

  3. PHP模板解析类实例

    作者:mckee 这篇文章主要介绍了PHP模板解析类,涉及php针对模板文件的解析与字符串处理的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 <?php class template { ...

  4. C++_进阶之函数模板_类模板

     C++_进阶之函数模板_类模板 第一部分 前言 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ...

  5. 学习C++模板,类模板

    当我们使用向量时,会经常使用形如:vector<int> a的式子.这个表达式就是一个类模板实例化的例子,vector是一个类模板,我们给他传递模板参数(见<>里),然后创建一 ...

  6. Django框架的使用教程--类视图-中间间-模板[六]

    类视图 类视图的使用 视图函数 class class_view(View): """类视图""" def get(self, reques ...

  7. C++复习:函数模板和类模板

    前言 C++提供了函数模板(function template).所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表.这个通用函数就称为函数模板.凡是函数体 ...

  8. 【校招面试 之 C/C++】第2题 函数模板、类模板、特化、偏特化

    1.C++模板 说到C++模板特化与偏特化,就不得不简要的先说说C++中的模板.我们都知道,强类型的程序设计迫使我们为逻辑结构相同而具体数据类型不同的对象编写模式一致的代码,而无法抽取其中的共性,这样 ...

  9. C++解析(26):函数模板与类模板

    0.目录 1.函数模板 1.1 函数模板与泛型编程 1.2 多参数函数模板 1.3 函数重载遇上函数模板 2.类模板 2.1 类模板 2.2 多参数类模板与特化 2.3 特化的深度分析 3.小结 1. ...

  10. C++学习之函数模板与类模板

    泛型编程(Generic Programming)是一种编程范式,通过将类型参数化来实现在同一份代码上操作多种数据类型,泛型是一般化并可重复使用的意思.泛型编程最初诞生于C++中,目的是为了实现C++ ...

随机推荐

  1. socket何时处于”读就绪状态“?---通过“应用程序大爷&quot;和&quot;内核孙子&quot;对话再看重要的select函数的使用方法

    前面. 我已经陆续介绍过select函数的一些零碎知识, 在本文中,我们来讨论这样一个问题:socket何时处于读就绪状态? 事实上主要讨论select函数, 毕竟socket的读就绪状态会导致sel ...

  2. Win7双屏显示设置

    双显示器:一个是T410自己的屏幕,一个是宏基的Acer1296*768显示器. 连接:将宏基显示器的Display端子连接到笔记本的Display口上,电源接上. 设置过程: 1.右键点屏幕,选“S ...

  3. [Erlang]Erlang经常使用工具解说

    原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface 联系邮箱:cto@188.com 但凡有图形界面的都须要linux系统安装了wx图形 ...

  4. PHPMailer_v5.1 使用[转]

    <?php /* * email 报警,主要检查服务器数据库是否还能正常连接 */ require("../common/config.php"); include(&quo ...

  5. Flutter常用布局组件

    Flutter控件本身通常由许多小型.单用途的控件组成,结合起来产生强大的效果,例如,Container是一种常用的控件,由负责布局.绘画.定位和大小调整的几个控件组成,具体来说,Container是 ...

  6. 算法笔记_103:蓝桥杯练习 算法提高 金明的预算方案(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些 ...

  7. QueryRunner

    在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,xx给我们详尽介绍了一个简化JDBC操作的组件——D ...

  8. sqlserver远程备份到其他服务器

    直接将数据库备份到其他机器上 --如果xp_cmdshell没有启用,请先启用 sp_configure reconfigure go sp_configure reconfigure go --1. ...

  9. 操作系统CPU调度知识点

    1.进程基本概念:进程是程序的一次运行. 是系统进程资源分配和调度的基本单位. 2.进程三态:运行状态.就绪状态.堵塞状态.三态转换规则,就绪状态的进程因为调度进程运行状态,运行状态因为时间片用完而进 ...

  10. JavaScript入门:002—JS代码放置的位置

    JavaScript在页面中使用,那么这些JS代码应该放在什么位置呢?以下来看一下. 一般来说有两种方式.写在界面上和使用.js文件.1.1界面上的Head部分能够直接放在head标签内,例如以下代码 ...