C++与Typescript的区别

这篇具有很好参考价值的文章主要介绍了C++与Typescript的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、C++类模板和函数模板

1.类模板

2.函数模板

二,Typescript 的泛型声明

1.泛型函数

2.泛型类

为什么C++和Typescript语言中主张模板和泛型


一、C++类模板和函数模板

在C++中,类模板和函数模板允许你为多种数据类型编写通用的代码。这就像每个人都有鼻子,耳朵,眼镜。但是有些人整合在一起就是帅哥美女,有的就长成。。。

C++与Typescript的区别,c++,typescript,javascript,开发语言

C++主要分为两个模板-------类模板和函数模板。

1.类模板

template<class 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
{
AnimalHouse<int> elephantHouse(100); // 创建一个大房间给大象住,大小为100  
elephantHouse.displaySize(); // 显示这个大房间的大小  
  
AnimalHouse<int> rabbitHouse(50); // 创建一个小房间给兔子住,大小为50  
rabbitHouse.displaySize(); // 显示这个兔子的小房间的大小
}

 在这个例子中,AnimalHouse 是一个类模板,它接受一个类型参数 T。这个T可以是任何数据类型,比如int、float或者自定义的数据类型。通过使用类型参数 T,你可以创建不同大小的房间。

2.函数模板

template<typename 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 a=5;
int b=3;
std::cout<<magicBox<int>(a,b,true)<<std::endl; // 计算5 + 3 = 8并输出结果
std::cout<<magicBox<int>(a,b,false)<<std::endl;// 计算5 - 3 = 2并输出结果
}

 在这个例子中,magicBox 是一个函数模板,它接受两个类型参数 T 和一个布尔值 operation。类型参数 T 可以是任何数据类型,比如int、float或者自定义的数据类型。布尔值 operation 用来决定是做加法还是减法。

类模板 函数模板
定义方式 使用template关键字后跟类型参数 与类模板相同
适用场景 适用于需要创建不同数据类型的对象,并使用相同逻辑处理的场景 适用于需要编写处理不同数据类型的通用函数的场景
代码复用 通过创建模板类的实例来复用代码 通过函数模板来复用代码
实例化次数 类模板的实例化次数与其对象实例的创建次数一致 函数模板的实例化次数与其函数的调用次数一致
类型参数的使用范围 类型参数用于类声明和类实现中的成员函数和成员变量 类型参数用于函数声明和函数定义中,也可以用于返回值和参数类型
自动数据类型推导 不可以 不可以

二,Typescript 的泛型声明

TypeScript 是 JavaScript 的一个超集(父集),增加了类型检查和其他的特性。在 TypeScript 中,你可以使用泛型来编写可重用的组件或函数,这些组件或函数可以处理多种数据类型。它的泛型有两种分别是泛型函数和泛型类

C++与Typescript的区别,c++,typescript,javascript,开发语言

1.泛型函数

function identity<T>(arg: T): T {  
    return arg;  
}  
  
let output = identity(10);  

在上面的例子中,identity 函数是泛型函数。它使用 <T> 来定义一个类型参数,并在函数的参数和返回类型中使用这个类型参数。

2.泛型类

class GenericNumber<T> {  
    zeroValue: T;  
    add: (x: T, y: T) => T;  
}  
  
let myGenericNumber = new GenericNumber<number>();  
myGenericNumber.zeroValue = 0;  
myGenericNumber.add = (x, y) => x + y;

在这个例子中,我们创建了一个名为 GenericNumber 的泛型类,它有一个类型参数 T。然后我们创建了 GenericNumber 的一个实例 myGenericNumber,并指定 T 为 number 类型。这样,我们就可以在 myGenericNumber 对象上使用数字操作了。

<T>表示定义模板类型,(value: T): T 表示参数和返回值类型都是同一个类型,具体T是什么类型就实参决定。

C++模板 TypeScript泛型
定义方式 使用关键字 "template" 来定义函数或类模板 使用泛型符号 "<>" 在函数或类声明中定义泛型
类型参数 template<typename T1, typename T2>;
(注意这里typename要大写)
<T1, T2>
(C++和TypeScript都可以使用多个类型)
类型检查 编译时进行类型检查,可以优化代码 运行时进行类型检查,可能影响性能
函数模板/泛型函数

template<typename T> T add(T a, T b)

{
return a + b;
}

function add<T>(a: T, b: T): T

{
return a + b;
}

类模板/泛型类 template<typename T> class Box { public: T content; Box(T value); };

class Box<T> 

{
public: T content; Box(T value);
};文章来源地址https://www.toymoban.com/news/detail-810404.html

为什么C++和Typescript语言中主张模板和泛型

  • 提高代码复用性:通过模板和泛型,程序员可以编写更加通用的代码,这些代码可以在多种数据类型上运行,而不需要为每一种数据类型单独编写代码。这大大减少了重复的代码,并提高了开发效率。
  • 提高代码可维护性:模板和泛型允许程序员将算法和数据结构与具体的类型分离,使得代码更加模块化。这使得代码更容易理解和维护,因为主要的逻辑被封装在独立的、可重用的组件中,而不是分散在大量的特定类型代码中。
  • 提供更好的类型安全:模板和泛型在编译时进行类型检查,这有助于在早期阶段发现并修复错误,而不是等到运行时才发现。这大大提高了代码的可靠性。
  • 提高性能:虽然泛型在运行时可能会引入一些性能开销,但通过使用泛型,程序员可以编写出更加通用的算法和数据结构,这些算法和数据结构可以在编译时进行优化,从而在某些情况下提供更好的性能。
  • 支持多范式编程:模板和泛型允许程序员使用多种编程范式,例如面向对象编程、函数式编程等。这使得语言更加灵活,能够更好地满足各种不同的编程需求。

到了这里,关于C++与Typescript的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript、TypeScript、ES5、ES6之间的联系和区别

    ECMAScript:  一个由 ECMA International 进行标准化,TC39 委员会进行监督的语言。通常用于指代标准本身。 JavaScript:  ECMAScript 标准的各种实现的最常用称呼。这个术语并不局限于某个特定版本的 ECMAScript 规范,并且可能被用于任何不同程度的任意版本的 ECMAScript 的实现。 ECMAS

    2024年02月13日
    浏览(43)
  • 【鸿蒙系统学习笔记】TypeScript开发语言

    HarmonyOS 应用的主要开发语言是 ArkTS,它由 TypeScript(简称TS)扩展而来,在继承TypeScript语法的基础上进行了一系列优化,使开发者能够以更简洁、更自然的方式开发应用。值得注意的是,TypeScript 本身也是由另一门语言 JavaScript 扩展而来。因此三者的关系如下图所示 2.1.1、线

    2024年02月19日
    浏览(43)
  • 【HarmonyOS北向开发】-03 ArkTS开发语言-TypeScript快速入门

     飞书原文链接:Docs

    2024年02月12日
    浏览(51)
  • HarmonyOS第一课ArkTS开发语言(TypeScript快速入门)

    ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以更简洁、更自然的方式开发跨端应用。要了解什么是ArkTS,我们首先要了解下ArkTS、TypeScript和JavaScript之间的关系: JavaScript是一种属

    2024年02月05日
    浏览(45)
  • HarmonyOS(二)—— 初识ArkTS开发语言(上)之TypeScript入门

    Mozilla创造了JS,Microsoft创建了TS,而Huawei进一步推出了ArkTS。因此在学习使用ArkTS前,需要掌握基本的TS开发技能。 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以更简洁、更自然的

    2024年02月06日
    浏览(54)
  • 深入理解ArkTS:Harmony OS 应用开发语言 TypeScript 的基础语法和关键特性

    Harmony OS应用开发的主力语言ArkTS的前身TS语言的基本语法。通过学习变量的声明和数据类型、条件控制、函数声明、循环迭代等基本知识,并了解内核接口的声明和使用。同时还介绍了模块化开发的概念,提高代码的复用性和开发效率。该对话还涉及了if else和switch条件控制语

    2024年02月04日
    浏览(50)
  • TypeScript与JavaScript

    博主作品: 《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMV

    2024年02月05日
    浏览(45)
  • TypeScript深度剖析:TypeScript 中命名空间与模块的理解?区别?

    TypeScript  与 ECMAScript  2015 一样,任何包含顶级  import  或者  export  的文件都被当成一个模块 相反地,如果一个文件不带有顶级的 import 或者 export 声明,那么它的内容被视为全局可见的 例如我们在在一个  TypeScript  工程下建立一个文件  1.ts ,声明一个变量 a ,如下: 然

    2024年02月07日
    浏览(32)
  • 单例模式——javascript和typescript

    确保某个方法或者类只有一个是咧。而且自行实例子并向整个系统提供这个实例。 某个方法或类只能一个; 必须自行创建这个实例 必须自行向整个系统提供这个实例。

    2024年02月05日
    浏览(51)
  • React框架:TypeScript支持的JavaScript库

    React 框架是一个功能强大的 JavaScript 库,让用户可以轻松地构建高度动态的用户界面。它借助虚拟 DOM 的思想实现高效的性能,并具有易于使用和灵活的编程接口。随着越来越多的人开始使用 React ,在不断的发展和变化中, React 框架现在加入了 TypeScript 的支持,使其成为一个

    2024年02月11日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包