c++类名后面加尖括号
时间: 2024-01-15 22:41:31 浏览: 29
在C++中,类名后面加尖括号表示这是一个模板类(template class),也称为泛型类。泛型类是一种通用的类,可以使用不同的数据类型作为其参数,以便在需要时生成特定类型的类。例如,可以定义一个泛型类来表示一个栈,可以用不同的数据类型来创建不同的栈,如整数栈、字符栈、字符串栈等。以下是一个示例:
```c++
template <typename T>
class Stack {
private:
T* data; // 栈的数据
int top; // 栈顶指针
public:
Stack(); // 构造函数
void push(T val); // 入栈
T pop(); // 出栈
bool isEmpty(); // 判断栈是否为空
};
```
在上面的示例中,`Stack`是一个泛型类,可以使用不同的数据类型作为其参数。例如,可以声明一个`Stack<int>`表示整数栈,或者声明一个`Stack<char>`表示字符栈,以此类推。
相关问题
C++类图中的模板类
在C++类图中,模板类可以用特殊的符号来表示。在引用\[1\]中的代码示例中,Singleton是一个模板类,它使用了可变模板参数和友元函数的概念来实现单例模式。在引用\[3\]中的代码示例中,类A被定义为一个单例类,并通过SINGLETON_DECL宏来声明为Singleton模板类的友元。这样,在调用A类的公共成员函数时,可以使用Singleton<A>::instance()来获取A类的单例实例,并调用其成员函数。所以,在C++类图中,模板类可以用类名后面的尖括号<>来表示,并在尖括号中指定模板参数的类型。
#### 引用[.reference_title]
- *1* *3* [C++单例模式模板类](https://blog.csdn.net/xiaosier_D/article/details/126345338)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [用 C++ 示例解释 UML 类图](https://blog.csdn.net/qq_22948593/article/details/119177373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
c++template
C++ 中的模板是一种通用编程工具,可以让我们编写与数据类型无关的代码。通过模板,我们可以编写一次代码,然后在多种数据类型上运行,而不必为每种数据类型编写单独的代码。
C++ 中的模板可以分为函数模板和类模板。函数模板是一个通用的函数,可以在运行时接受不同类型的参数。类模板是一个通用的类,可以在运行时实例化为不同的类型。
下面是一个简单的函数模板示例:
```
template<typename T>
T max(T x, T y) {
return (x > y) ? x : y;
}
```
在上面的代码中,`typename` 关键字指定了一个类型参数,即 `T`。然后我们定义了一个 `max` 函数,它接受两个类型为 `T` 的参数,并返回它们中较大的一个。
下面是一个使用函数模板的示例:
```
int a = 5, b = 10;
double c = 3.14, d = 2.71;
cout << max(a, b) << endl; // 输出 10
cout << max(c, d) << endl; // 输出 3.14
```
在这个示例中,我们用不同的数据类型调用了 `max` 函数,并且它能够正确地返回两个值中较大的一个。
类模板的语法与函数模板类似,但是我们需要在类名后面加上尖括号,并指定一个或多个类型参数。下面是一个简单的类模板示例:
```
template<typename T>
class Vector {
public:
Vector() {}
void push_back(T value) { data[size++] = value; }
T operator[](int index) { return data[index]; }
private:
T data[100];
int size = 0;
};
```
在上面的代码中,我们定义了一个 `Vector` 类模板,它可以存储不同类型的数据。我们提供了一些基本的方法,如 `push_back` 和 `operator[]`,以便在运行时添加元素并访问元素。
下面是一个使用类模板的示例:
```
Vector<int> v1;
v1.push_back(1);
v1.push_back(2);
cout << v1[0] << endl; // 输出 1
cout << v1[1] << endl; // 输出 2
Vector<double> v2;
v2.push_back(3.14);
v2.push_back(2.71);
cout << v2[0] << endl; // 输出 3.14
cout << v2[1] << endl; // 输出 2.71
```
在这个示例中,我们实例化了两个不同的 `Vector` 对象,一个存储 `int` 类型的值,另一个存储 `double` 类型的值。我们可以用相同的方法向它们添加元素,并访问它们的值。