STL中重要的概念
创始人
2024-03-30 11:00:19

1、仿函数与谓词与内建函数

仿函数是一个类,里面有成员函数重载()符号,在我们调用实例对象的时候,会自动调用重载函数,这样就像是一个函数一样

myadd(10,10)

public:
int operator()(int v1, int v2)
{
return v1+v2
}
最上面的一个实例对象,传入两个参数之后,就会自动调用成员函数重载()

重载函数接受一个参数就叫做一元谓词,接受两个参数就叫做二元谓词

内建函数
在库里面将一封装一些仿函数,我们可以在加入库的头文件之后,就可以像函数一样使用他们

2、函数模板与类模板

模板与我们的一般其实差不多,就是一个特点这个函数的传入参数可以是动态变化的,因此我们要在模板开头写一句声明特殊的数据类型
template

template
函数声明或定义

template —表示声明创建出一个模板

typename —表示后面是一个数据类型,我们也可以写成class

T ------通用的数据类型,名称可以替换,一般是大写字母

我们在数据传入的时候有两种方式
1、自动类型推导(数据本身的数据类型)
2、显示指定类型(标出传入数据的类型)
/利用模板函数兼容上面两个函数

template //类模板的声明

template  //类模板的声明//创建一个类模板函数
void myswap(T& a, T& b)
{T temp = a;a = b;b = temp;
}

模板的实例化
编译器就通过这个模板,推出一个 T 是 int 类型的函数。
这时编译器就把这个模板里的 T 都替换成 int,生成出一份 T 是 int 的函数,传入的类型不同生成的函数也是不同的
在这里插入图片描述
在这里插入图片描述

我们的a1是int d1是double类型,在传参之前会强制转为double

显示类型转换
在这里插入图片描述
模板函数的匹配
函数模板与普通函数同名的话,优先调用普通函数

在实验空模板列表参数就会优先调用函数模板
myPrint<>(a,b);

模板的局限性:我们自定义的数据结构需要将模板函数重载之后才可以使用,不然无法识别自定义的数据类型

类模板(只支持显示类型推导)
template< typename T>——声明创建模板,多个变量要写成下面的形式
typename——表明其后面的符号是一种数据类型,可以用class代替
T——通用的数据类型,名称可以替换,通常为大写字母

//类模板
template
class Person
{
public:Person(NameType name, AgeType age){this->m_Age = age;this->m_Name = name;}void showPerson(){cout << this->m_Name << this->m_Age << endl;}NameType m_Name;AgeType m_Age;
};

类模板对象做函数参数

指定传入的类型——直接显式对象的数据类型(没有隐式类型转换)
在这里插入图片描述
参数模板化——将对象中的参数变为模板参数进行传递
在这里插入图片描述
整个类模板化——将这个对象类型,模板化进行传递

在这里插入图片描述
子类在基础一个父类模板的时候,我们必须要指定父类的数据类型,不然无法继承

在这里插入图片描述
类模板的成员函数类外实现

1、写类模板,成员函数只有定义,没有具体内容

在这里插入图片描述
2、类外实现
类模板中函数放在类外进行定义时,需要加模板参数列表
在这里插入图片描述
类模板分文件编写
就是将我们的预定于类与我们的类外定义写在一个文件中,后缀交hpp

3、友元

一般我们类中的私有部分是外界成员无法访问的,但是要是在类中声明一个外界函数或者类时这个类的友元,那么这个外界函数或者类就可以访问到类的私有部分

友元是单向的(单向好友)

1、友元函数

我们将外部函数声明了友元之后,函数指针buildding就可以访问到类的私有部分了

#include 
#include using namespace std;// 房屋类
class Building
{// 告诉编译器 laoWang全局函数是 Building类  的好朋友,可以访问Building对象的私有成员friend void laoWang1(Building *building);friend void laoWang2(Building &building);friend void laoWang3(Building building);public:Building(){m_SittingRoom = "客厅";m_BedRoom = "卧室";}string m_SittingRoom;	// 客厅private:string m_BedRoom;		// 卧室
};//全局函数
void laoWang1(Building *building)
{cout << "隔壁老王 全局函数 正在访问:(地址传递) " << building->m_SittingRoom << endl;cout << "隔壁老王 全局函数 正在访问:(地址传递) " << building->m_BedRoom << endl;
}void laoWang2(Building &building)
{cout << "隔壁老王 全局函数 正在访问:(引用传递) " << building.m_SittingRoom << endl;cout << "隔壁老王 全局函数 正在访问:(引用传递) " << building.m_BedRoom << endl;
}void laoWang3(Building building)
{cout << "隔壁老王 全局函数 正在访问:( 值传递 ) " << building.m_SittingRoom << endl;cout << "隔壁老王 全局函数 正在访问:( 值传递 ) " << building.m_BedRoom << endl;
}void test()
{Building building;laoWang1(&building);laoWang2(building);laoWang3(building);
}int main()
{test();
}

2、友元类

声明类的友元之后,友元类就可以调用这个类私有成员

#include 
#include using namespace std;// 类作友元class Building;
class LaoWang
{
public:LaoWang();void visit();	//参观函数  访问Building中的属性Building * building;private:};// 房屋类
class Building
{// 告诉编译器,LaoWang类是Building类的好朋友,可以访问Building类的私有成员friend class LaoWang;
public:Building();string m_SittingRoom;	// 客厅private:string m_BedRoom;		// 卧室
};// 类外定义成员函数Building::Building()
{m_SittingRoom = "客厅";m_BedRoom = "卧室";
}LaoWang::LaoWang()
{// 创建建筑物对象building = new Building;
}void LaoWang::visit()
{cout << "隔壁老王LaoWang类正在访问:" << building->m_SittingRoom << endl;cout << "隔壁老王LaoWang类正在访问:" << building->m_BedRoom << endl;
}void test()
{LaoWang lw;lw.visit();
}int main()
{test();return 0;
}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...