首页 > 编程语言 >4/3 c++模板 2day

4/3 c++模板 2day

时间:2023-04-03 22:56:47浏览次数:39  
标签:return 函数 mb age c++ template 2day 模板

1.与普通函数的区别
{
隐式转换必须在参数列标给出类型
1.函数模板与普通函数区别
2.都可以被重载
3.在模板函数和普通函数都可以实现的情况下优先调用普通函数
4.test<>(10); 可以强制调用函数
5.函数模板直接也可以重载,具体使用看最好的匹配
}

include

using namespace std;
template
void test(T A)
{
printf("我是模板函数");

}
template<class T,class M>
void test(T A, M b)
{
printf("我是模板函数2");

}
void test(int c)
{
cout << c << endl;

}
2.函数模板的局限性
无法比较两个类 或者数组 我们只能将模板具体化

include

using namespace std;
/// 动物园案例

template
bool test(T &A,T &z)
{
if (A == z)
{
return true;
}
else
{
return false;
}

}

class to
{
public:
to(int age)
{
this->age = age;
}
int age;

};
template<> bool test(to& A, to& z)
{

printf("函数模板具体化\n");
if (A.age == z.age)
{
	return 1;
}
else
{
	return 0;
}

}

int main()
{
to t1(20);
to t2(20);
if (test(t1, t2))
{
printf("相等");
}
else
{
printf("不相等");
}

return 0;

}

3.类模板
不会自动推导函数类型,需要在参数列表给出
2.默认类型 给出后所有的类膜拜都要给出

4.复数的模板类
![[$QDM@SGL@FK6)$9@W8A]DOX.jpg]]
运算符实现 符号重载实现

include

include<string.h>

using namespace std;
/// 动物园案例
template<class A,class B>
class mb
{
public:
mb()
{
a = 0;
b = 0;
}
mb(A name, B age)
{

	this->a = name;
	this->b = age;
}
A a;
B b;
mb mb_add(mb& c2)
{
	mb<A, B> c;
	c.a = this->a + c2.a;
	c.b = this->b + c2.b;
	return c;
}

mb operator+(mb& c2)
{

	mb<A, B> tep(this->a + c2.a, this->b + c2.b);
	
	return tep;
}

};

int main()
{
mb<int,int> z1(3, 4);
mb<int, int> z2(5, 4);
mb<int, int> z3;
//z3 = z1.mb_add(z2);
z3 = z1 + z2;
printf("%d", z3.a);
return 0;

}

5.类模板做函数参数
//直接指定
void func(to<string, int>& c)
{

}
//参数模板化
template<class A, class B>
void func2(to<A , B >& b)
{

}
//整个类 模板化
template
void func(A& c)
{

}

6.类模板的继承
1.普通类继承模板类
class toto :public to<int, int>
{
//告诉编译器模板类的具体类型
};
int ma
2.类模板继承类模板
7.类模板成员的类内 类外实现
类外 写成函数模板
template<class A, class B>
void to<A, B>::test2(A z, A b)
{
}

标签:return,函数,mb,age,c++,template,2day,模板
From: https://www.cnblogs.com/Agtw/p/17284796.html

相关文章

  • c++ std::package_task,task.get_future()
    #include<iostream>#include<future>#include<thread>intcountdown(intfrom,intto){for(inti=from;i!=to;--i){std::cout<<i<<std::endl;std::this_thread::sleep_for(std::chrono::seconds(1));......
  • KMP算法--模板
    生成Pattern的字符串的next数组,长度为m+1点击查看代码voidgetNext(vector<int>&next,string&pattern){intn=pattern.size();for(intj=0,k=-1;j<n;){if(k==-1||pattern[j]==pattern[k])next[++j]=++k;......
  • C++ 引用
    (一)多重含义C++中的*和&有多重含义,在不同的使用条件下有不同的意思:1.*int*p=&a;/1.指针a=a*b;/2.乘法*p=100;/3.指向2.&intc=a&b;/1.位运算转换为二进制int*p=&a;/2.取地址inta=100;int&ar=a;/3.引用(二)引用的......
  • Flask快速入门day02(1、CBV使用及源码分析,2、模板用法,3、请求与响应的基本用法,4、sessi
    目录Flask框架一、CBV分析1、CBV编写视图类方法二、CBV源码分析1、CBV源码问题2、补充问题3、总结三、模板1、py文件2、html页面四、请求与响应1、request常用方法2、response常用方法五、session及源码分析1、session的基本使用2、session源码分析六、闪现七、请求扩展Flask框......
  • 【Flask】cbv源码分析 flask模板使用 flask请求与响应 session及源码分析 闪现flash
    目录上节回顾今日内容1cbv分析1.1源码分析2模板2.1app.py2.2index.html3请求与响应4session及源码分析4.1session的使用4.2源码分析4.3session执行原理5闪现6请求扩展练习上节回顾#1web框架 -django大而全-flask小而精-sanic-fastapi-同......
  • (4.3)数组、对象及类数组对象,set的用法,正则表达式的常用方法,蓝桥杯备赛-(生成数组、数
    1.1数组、对象及类数组对象1.数组:​ 数组是有序的数据集合,其中的索引值从0开始递增,并且数组有length属性,可以获取数组内的元素个数,其中的值可以是任何的数组类型。2.对象:​ 对象是无序的是由一个或多个键值对组成的数据集合,对象没有length属性。3.伪数组(类数组对象):​ ......
  • C语言再学习 -- 详解C++/C 面试题 2
    (经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题。参看:嵌入式程序员面试问题集锦1、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #defineSENCONDS_PER_YEAR(60*60*24*365)UL解答:#define声明一个常量,使用计算常量表达式的值来表明一年中有多少......
  • 笔记十四:创建模板虚拟机
    一:学习内容gitlab服务器要求安装虚拟机硬件安装虚拟机软件-centos系统配置虚拟机ip地址和主机名称安装xshell远程操作虚拟机模板虚拟机环境准备 二:gitlab服务器要求gitlab安装,要求服务器是centos7及以上,centos6是不支持安装gitlab的。准备一个系统为Centos7以上版本的......
  • c++ 宏定义
    #define不被视为语言的一部分Effective中有说明,宁可以编译器替换预处理器(尽量以 const、enum、inline 替换 #define)对于类似函数的宏,尽量使用内联函数替换掉#define当然也有一些经常不得不用到的宏定义,比如c++中条件编译相关的预编译指令,包括#define、#undef、#ifdef、#ifn......
  • C++this指针
    C++只有非静态成员变量才属于类的对象上在C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上首先看一下空对象占多少空间classFoo{};intmain(){Foofoo;cout<<"sizeofis:"<<sizeof(foo)<<endl;}结果为sizeofp=1;......