windows 网站开发环境,网站seo服务公司,产品推广渠道有哪些,做导师一般去什么网站找素材目录 一、C类模板和函数模板
1.类模板
2.函数模板
二#xff0c;Typescript 的泛型声明
1.泛型函数
2.泛型类
为什么C和Typescript语言中主张模板和泛型 一、C类模板和函数模板
在C中#xff0c;类模板和函数模板允许你为多种数据类型编写通用的代码。这就像每个人都有…目录 一、C类模板和函数模板
1.类模板
2.函数模板
二Typescript 的泛型声明
1.泛型函数
2.泛型类
为什么C和Typescript语言中主张模板和泛型 一、C类模板和函数模板
在C中类模板和函数模板允许你为多种数据类型编写通用的代码。这就像每个人都有鼻子耳朵眼镜。但是有些人整合在一起就是帅哥美女有的就长成。。。 C主要分为两个模板-------类模板和函数模板。
1.类模板
templateclass T1, class T2, class Tn
class 类模板名
{// 类内成员定义
};
通常类模板是这样的格式。typename是用来定义模板参数关键字也可以使用class。切记不能使用struct代替class
template typename T
class AnimalHouse {
private: T size; // 房间的大小
public: AnimalHouse(T size) : size(size) {} // 构造函数用来设置房间的大小 void displaySize() { std::cout 房间的大小是 size std::endl; }
};
//这样使用
int main
{
AnimalHouseint elephantHouse(100); // 创建一个大房间给大象住大小为100
elephantHouse.displaySize(); // 显示这个大房间的大小 AnimalHouseint rabbitHouse(50); // 创建一个小房间给兔子住大小为50
rabbitHouse.displaySize(); // 显示这个兔子的小房间的大小
} 在这个例子中AnimalHouse 是一个类模板它接受一个类型参数 T。这个T可以是任何数据类型比如int、float或者自定义的数据类型。通过使用类型参数 T你可以创建不同大小的房间。
2.函数模板
templatetypename T1, typename T2,......,typename Tn
返回值 函数名(参数列表
{}
typename是用来定义模板参数关键字也可以使用class。切记不能使用struct代替class。
template typename T
T magicBox(T a, T b, bool operation){ if (operation) { return a b; // 如果选择加法就返回两个数的和 }else{ return a - b; // 如果选择减法就返回第一个数减去第二个数的结果 }
}int main()
{
int a5;
int b3;
std::coutmagicBoxint(a,b,true)std::endl; // 计算5 3 8并输出结果
std::coutmagicBoxint(a,b,false)std::endl;// 计算5 - 3 2并输出结果
} 在这个例子中magicBox 是一个函数模板它接受两个类型参数 T 和一个布尔值 operation。类型参数 T 可以是任何数据类型比如int、float或者自定义的数据类型。布尔值 operation 用来决定是做加法还是减法。
类模板函数模板定义方式使用template关键字后跟类型参数与类模板相同适用场景适用于需要创建不同数据类型的对象并使用相同逻辑处理的场景适用于需要编写处理不同数据类型的通用函数的场景代码复用通过创建模板类的实例来复用代码通过函数模板来复用代码实例化次数类模板的实例化次数与其对象实例的创建次数一致函数模板的实例化次数与其函数的调用次数一致类型参数的使用范围类型参数用于类声明和类实现中的成员函数和成员变量类型参数用于函数声明和函数定义中也可以用于返回值和参数类型自动数据类型推导不可以不可以
二Typescript 的泛型声明
TypeScript 是 JavaScript 的一个超集(父集)增加了类型检查和其他的特性。在 TypeScript 中你可以使用泛型来编写可重用的组件或函数这些组件或函数可以处理多种数据类型。它的泛型有两种分别是泛型函数和泛型类 1.泛型函数
function identityT(arg: T): T { return arg;
} let output identity(10);
在上面的例子中identity 函数是泛型函数。它使用 T 来定义一个类型参数并在函数的参数和返回类型中使用这个类型参数。
2.泛型类
class GenericNumberT { zeroValue: T; add: (x: T, y: T) T;
} let myGenericNumber new GenericNumbernumber();
myGenericNumber.zeroValue 0;
myGenericNumber.add (x, y) x y;
在这个例子中我们创建了一个名为 GenericNumber 的泛型类它有一个类型参数 T。然后我们创建了 GenericNumber 的一个实例 myGenericNumber并指定 T 为 number 类型。这样我们就可以在 myGenericNumber 对象上使用数字操作了。
T表示定义模板类型(value: T): T 表示参数和返回值类型都是同一个类型,具体T是什么类型就实参决定。
C模板TypeScript泛型定义方式使用关键字 template 来定义函数或类模板使用泛型符号 在函数或类声明中定义泛型类型参数templatetypename T1, typename T2 注意这里typename要大写T1, T2 C和TypeScript都可以使用多个类型类型检查编译时进行类型检查可以优化代码运行时进行类型检查可能影响性能函数模板/泛型函数 templatetypename T T add(T a, T b) { return a b; } function addT(a: T, b: T): T { return a b; } 类模板/泛型类templatetypename T class Box { public: T content; Box(T value); }; class BoxT { public: T content; Box(T value); };
为什么C和Typescript语言中主张模板和泛型
提高代码复用性通过模板和泛型程序员可以编写更加通用的代码这些代码可以在多种数据类型上运行而不需要为每一种数据类型单独编写代码。这大大减少了重复的代码并提高了开发效率。提高代码可维护性模板和泛型允许程序员将算法和数据结构与具体的类型分离使得代码更加模块化。这使得代码更容易理解和维护因为主要的逻辑被封装在独立的、可重用的组件中而不是分散在大量的特定类型代码中。提供更好的类型安全模板和泛型在编译时进行类型检查这有助于在早期阶段发现并修复错误而不是等到运行时才发现。这大大提高了代码的可靠性。提高性能虽然泛型在运行时可能会引入一些性能开销但通过使用泛型程序员可以编写出更加通用的算法和数据结构这些算法和数据结构可以在编译时进行优化从而在某些情况下提供更好的性能。支持多范式编程模板和泛型允许程序员使用多种编程范式例如面向对象编程、函数式编程等。这使得语言更加灵活能够更好地满足各种不同的编程需求。