类型区分

1.数组:提前分配大小,空间不可灵活变动,插入和删除元素效率低。


2.ArrayList:动态扩充和收缩,都是object类型,可放入不同类型数据,但是不安全、还有有装箱和拆箱。


3.list:动态扩充和收缩,类型统一,数据安全且不用拆装箱,但类型只能为一种


4泛型:list<T>,有list的优点,但是他的类型可以不统一

开放类型和封闭类型:当为一个泛型类型没有指定实际的数据类型时,就称为开放类型,例如List<T>,对于任何开放类型都不能创建该类型的实例。

如果为泛型类型的所有类型实参传递的都是实际数据类型,类型就称为封闭类型。


5.Hashtable:哈希表
用于处理和表现类似key、value的键值对集合,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.Hashtable 内的每一组对象就是一个DictionaryEntry。
由于存储的都是object,所以对于值类型要进行装箱和拆箱操作。


6.Dictionary
Dictionary表示键和值的集合。Dictionary<string, string>是一个泛型。他本身有集合的功能有时候可以把它看成数组。他的结构是这样的:Dictionary<[key], [value]>。他的特点是存入对象是需要与[key]值一一对应的存入该泛型。通过某一个一定的[key]去找到对应的值。


7.枚举:一个变量只有可能的几种取值。
### C++ 函数重载的区别方式 在 C++ 中,函数重载是通过不同的形参类型、形参数量以及形参顺序来区分的。以下是对这些区别的详细说明: #### 1. **形参类型** 函数重载可以通过形参类型的差异来实现。即使函数名称相同,只要形参类型不同,就可以构成重载。 ```cpp int add(int x, int y); // 形参类型为 int float add(float x, float y); // 形参类型为 float ``` 上述两个 `add` 函数因为形参类型不同而可以被正确区分[^1]。 #### 2. **形参数量** 函数重载也可以通过形参数量的不同来实现。即使形参类型相同,只要形参数量不同,就可以构成重载。 ```cpp int add(int x, int y); // 两个形参 int add(int x, int y, int z); // 三个形参 ``` 上述两个 `add` 函数因为形参数量不同而可以被正确区分[^1]。 #### 3. **形参顺序** 当形参类型和数量相同时,可以通过调整形参的顺序来实现重载。C++ 编译器会根据调用时的实际参数顺序匹配相应的函数。 ```cpp void display(int x, float y); // 形参顺序:int 在前,float 在后 void display(float x, int y); // 形参顺序:float 在前,int 在后 ``` 上述两个 `display` 函数因为形参顺序不同而可以被正确区分。 #### 4. **返回值类型** 需要注意的是,仅通过返回值类型的不同无法实现函数重载。C++ 编译器不会根据返回值类型区分重载函数。 ```cpp int add(int x, int y); // 返回值类型为 int float add(int x, int y); // 返回值类型为 float ``` 上述代码会导致编译错误,因为 C++ 不支持仅通过返回值类型进行重载[^1]。 #### 5. **默认形参值与二义性** 在使用默认形参值时,需要特别注意避免二义性。例如: ```cpp void fun(int length, int width = 2, int height = 3); // 默认形参值 void fun(int length); // 单个形参 ``` 上述代码中,`fun` 函数可以通过形参数量的不同来区分。但如果调用时传递的参数数量不明确,可能会导致二义性问题[^1]。 --- ### 示例代码 以下是一个综合示例,展示了如何通过形参类型、数量和顺序实现函数重载: ```cpp #include <iostream> using namespace std; // 根据形参类型区分 int add(int x, int y) { return x + y; } float add(float x, float y) { return x + y; } // 根据形参数量区分 int add(int x, int y, int z) { return x + y + z; } // 根据形参顺序区分 void display(int x, float y) { cout << "int first: " << x << ", float second: " << y << endl; } void display(float x, int y) { cout << "float first: " << x << ", int second: " << y << endl; } int main() { cout << add(1, 2) << endl; // 调用 int add(int x, int y) cout << add(1.0f, 2.0f) << endl; // 调用 float add(float x, float y) cout << add(1, 2, 3) << endl; // 调用 int add(int x, int y, int z) display(1, 2.0f); // 调用 void display(int x, float y) display(1.0f, 2); // 调用 void display(float x, int y) return 0; } ``` ---
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值