//类模板 template<class name_type,class age_type> //名字类型和年龄类型 原来都是一个T 现在有俩了 class person { public: person(name_type name,age_type age)//有参构造 { this->m_name = name; this->m_age = age; } void show_person() { cout << "name = :" << this->m_name << endl; cout << "age = :" << this->m_age << endl; } name_type m_name; age_type m_age; }; void test01()//测试使用类模板 { //通过类模板创建实例化对象 把类型参数化 person<string, int> p1("凯文", 25);//string int 传入name_type age_type //凯文 25 实参传给有参构造的形参name age了 p1.show_person(); } int main() { test01();
时间: 2024-04-12 19:33:41 浏览: 81
这段代码演示了一个类模板的使用。类模板允许我们创建可以在不同类型上工作的通用类。
在这个例子中,我们定义了一个名为`person`的类模板。它有两个类型参数:`name_type`和`age_type`,分别表示名字的类型和年龄的类型。
在类模板中,我们定义了一个具有两个参数的构造函数,用于初始化名字和年龄成员变量。然后我们定义了一个`show_person()`函数用于显示名字和年龄。
在`test01()`函数中,我们使用类模板创建了一个实例化对象`p1`。我们通过将`string`和`int`作为类型参数传递给类模板,将具体的名字类型和年龄类型实例化为`person<string, int>`。然后我们调用了`show_person()`函数来显示名字和年龄。
最后,在`main()`函数中调用了`test01()`来测试类模板的使用。
注意,类模板只是一个模板,它不会在编译时生成实际的代码。实际的代码会在使用类模板创建对象时进行实例化。所以,在编译时并不会有问题,但在运行时可能会引发错误,例如传递了错误的类型参数。
相关问题
<template> <table> <thead> <tr> <th>姓名</th> <th>年龄</th> <th>性别</th> </tr> </thead> <tbody> <tr v-for="person in people" :key="person.id"> <td :style="{ backgroundColor: person.color }">{{ person.name }}</td> <td :style="{ backgroundColor: person.color }">{{ person.age }}</td> <td :style="{ backgroundColor: person.color }">{{ person.gender }}</td> </tr> </tbody> </table></template><script> export default { data() { return { people: [ { id: 1, name: '张三', age: 20, gender: '男', color: 'red' }, { id: 2, name: '李四', age: 25, gender: '女', color: 'green' }, { id: 3, name: '王五', age: 30, gender: '男', color: 'blue' } ] } } }</script>美化此表格
好的,以下是一个美化后的 Vue 表格展示示例:
```html
<template>
<div class="table-container">
<table>
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
</tr>
</thead>
<tbody>
<tr v-for="person in people" :key="person.id">
<td :style="{ backgroundColor: person.color }">{{ person.name }}</td>
<td :style="{ backgroundColor: person.color }">{{ person.age }}</td>
<td :style="{ backgroundColor: person.color }">{{ person.gender }}</td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
export default {
data() {
return {
people: [
{ id: 1, name: '张三', age: 20, gender: '男', color: 'red' },
{ id: 2, name: '李四', age: 25, gender: '女', color: 'green' },
{ id: 3, name: '王五', age: 30, gender: '男', color: 'blue' }
]
}
}
}
</script>
<style>
.table-container {
margin: 20px auto;
width: 80%;
max-width: 800px;
}
table {
border-collapse: collapse;
width: 100%;
}
th {
background-color: #f2f2f2;
color: #333;
font-weight: bold;
text-align: left;
padding: 10px;
}
td {
border: 1px solid #ccc;
padding: 10px;
}
</style>
```
在上面的示例中,我们添加了一个包含表格的容器,并使用 CSS 样式来美化表格。我们使用 `margin` 和 `width` 属性来设置容器的外边距和宽度,并使用 `max-width` 属性来限制容器的最大宽度。我们还使用 `border-collapse` 属性将表格边框合并,并使用 `th` 和 `td` 元素的样式值来设置表头和单元格的样式。您可以根据需要调整样式值来自定义表格的外观。
为什么错了:template<class T> bool myCompare(T& a, T& b) { if (a == b) { return true; } else { return false; } } //利用具体化Person的版本来实现代码,具体优化优先调用 template<class Person>bool myCompare(Person& p1, Person& p2) { if (p1.m_Name == p2.m_Name && p1.m_Age == p2.m_Age) { return true; } else { return false; } }
这段代码有两个问题:
1. 函数模板和具体化版本的参数类型不一致,会导致具体化版本无法调用。函数模板的参数是引用类型,而具体化版本的参数是 Person 类型。
2. 具体化版本的定义需要放在函数模板之后,否则编译器无法找到相应的具体化版本。
正确的代码应该是:
```c++
template<class T>
bool myCompare(T& a, T& b) {
if (a == b) {
return true;
} else {
return false;
}
}
class Person {
public:
string m_Name;
int m_Age;
public:
Person(string name, int age) {
m_Name = name;
m_Age = age;
}
};
template<>
bool myCompare<Person>(Person& p1, Person& p2) {
if (p1.m_Name == p2.m_Name && p1.m_Age == p2.m_Age) {
return true;
} else {
return false;
}
}
```
这段代码定义了一个函数模板 `myCompare`,以及一个具体化版本 `myCompare<Person>`。具体化版本的参数类型是 `Person` 类型,用来比较两个 `Person` 对象是否相等。注意,具体化版本的定义放在函数模板之后。
阅读全文