Java,C#,和C++ 中的泛型/模版对比。

泛型,模版 是面向对象语言的一个重要特征,它是重载,多态的发展。

C# 的泛型 定义和调用都是跟在类名之后,函数名之后,添加尖括号和泛型即可。类模版和函数模版可以同时使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyTest
{
    public class TemplateTest<T>
    {
        public void test<K,V>(K my1,V my2,T my3)
        {
            Console.WriteLine(my1);
            Console.WriteLine(my2);
            Console.WriteLine(my3);
        }
        public TemplateTest(T Test)
        {

        }
    }
}

TemplateTest<int> TemplateTest = new TemplateTest<int>(1);
TemplateTest.test<Int16, float>(2, 3.0f, 3);//显式

TemplateTest TemplateTest2 = new TemplateTest();
TemplateTest.test(2, 3.0f, 3);//隐式

java 的泛型 : 定义和调用类模版是写在类名之后,定义和调用函数模版是写在返回值之前,添加尖括号和泛型即可。类模版和函数模版可以同时使用

package com.zg.mymes;

/**
 * @Auther: Zg
 * @Date: 2023/3/12 - 03 - 12 - 20:07
 * @Description: com.zg.mymes
 * @version: 1.0
 */
public class MyTest<T> {

    public <T1, T2>void test1(T my, T1 my1, T2 my2){
        System.out.println(my);
        System.out.println(my1);
        System.out.println(my2);
    }
}

    @Test
    void Test35(){
        MyTest<Integer> myTest = new MyTest(); //指定类型
        myTest.<Float,String>test1(1,3.f,"test");//指定类型

        MyTest myTest1 = new MyTest(); //推断
        myTest.test1(1,3.f,"test");
    }

cpp:

cpp的类模版和函数模版最好不要同时使用:

函数模版:cpp的函数模版可以自动推断,泛型定义为template<typename T1, typename T2>,template<class T1,class T2>,定义写在类/函数的返回值之前,调用写在函数名之后



#ifndef MYBASECLASS_H
#define MYBASECLASS_H
#include<iostream>
#include<string>

using namespace std;

class MyBaseClass
{
public:
    MyBaseClass();
    template<typename T1, typename T2> void testFuc(T1 &param1, T2&param2);
};

template<typename T1, typename T2>
void MyBaseClass::testFuc(T1 &param1, T2&param2)
{
    cout<<"this is"<<param1<<param2<<endl;
}
#endif // MYBASECLASS_H

    MyBaseClass *mybase = new MyBaseClass() ;
    int data1 = 10;
    string data2 = "test2";
    mybase->testFuc(data1,"tttttt"); //隐式类型,可以推断
    mybase->testFuc<int, string>(data1,data2); //显式类型
    delete mybase;
    mybase = NULL;

类模版:

#ifndef MYBASE2_H
#define MYBASE2_H
#include <iostream>
#include<string>
using namespace std;

template<class T1,class T2>class Mybase2
{
public:
    Mybase2();
    void printTest(T1 t1, T2 t2);
};

template<class T1, class T2>
void Mybase2<T1, T2>::printTest(T1 t1, T2 t2)
{
    cout<<t1<<t2<<endl;
}

template<class T1, class T2> Mybase2<T1, T2>::Mybase2()
{

}

#endif // MYBASE2_H


    Mybase2<int,string> *mybase2 = new Mybase2<int,string>();
    mybase2->printTest(data1, data2);
    delete mybase2;
    mybase2 = NULL;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值