结构体与模板
来源:互联网 发布:windows已出现关键问题 编辑:程序博客网 时间:2024/06/05 07:16
1、结构体(关键字struct)
在C++中,struct与class最主要的区别是默认访问权限和继承方式不同,在其他方面的差异很小。
在class中可以实现的各种重载运算符操作在struct中一样可以,而且可以在struct中定义含默认形参的构造函数
#include<iostream>using namespace std;struct Point { int x, y; Point(int x = 0, int y = 0) : x(x), y(y) {} //列表初始化};Point operator + (const Point& A, const Point& B) { return Point(A.x + B.x, A.y + B.y);}ostream& operator << (ostream& out, const Point& p) { out << "(" << p.x << "," << p.y << ")"; return out;}int main() { Point a, b(1, 2); a.x = 3; cout << a + b << "\n"; return 0;}
上面的Point结构体重载了“+”运算符和流输出方式
2、模板(关键字template)
可以通过定义一个模板来提高函数的复用性,
template<typename T>T sum(T* begin, T* end) { T *p = begin; T ans = 0; for(T *p = begin; p != end; p++) ans = ans + *p; return ans;}
这样一来,sum函数就可以计算各种数据类型的数组的和了
#include<iostream>using namespace std;struct Point { int x, y; Point(int x = 0, int y = 0) : x(x), y(y) {}};Point operator + (const Point& A, const Point& B) { return Point(A.x + B.x, A.y + B.y);}ostream& operator << (ostream& out, const Point& p) { out << "(" << p.x << "," << p.y << ")"; return out;}template<typename T>T sum(T* begin, T* end) { T *p = begin; T ans = 0; for(T *p = begin; p != end; p++) ans = ans + *p; return ans;}int main() { double a[] = {1.1, 2.2, 3.3, 4.4}; cout << sum(a, a + 4) << "\n"; Point b[] = {Point(1, 2), Point(3, 4), Point(5, 6), Point(7 ,8)}; cout << sum(b, b + 4) << "\n"; return 0;}
上面的代码中之所以写成ans = ans + p而不写成ans += p,是因为Point结构体中并没有定义+=运算符。
结构体和类自身也是可以带模板的,上面的Point结构体中,它的成员是int型的,如果需要double或者其他类型的,就需要再重新声明一个结构体,这时候如果有一个模板,就会非常方便。
#include<iostream>using namespace std;template <typename T>struct Point { T x, y; Point(T x = 0, T y = 0) : x(x),y(y) {}};template <typename T>Point<T> operator + (const Point<T>& A, const Point<T>& B) { return Point<T>(A.x + B.x, A.y + B.y);}template <typename T>ostream& operator << (ostream& out, const Point<T>& p) { out << "(" << p.x << "," << p.y << ")"; return out;}int main() { Point<int> a(1, 2), b(3, 4); Point<double> c(1.1, 2.2), d(3.3, 4.4); cout<< a + b << " " << c + d << "\n"; return 0;}
阅读全文
0 0
- 结构体与模板
- C++ 模板结构体
- 结构体模板
- c++结构体模板
- 结构体模板
- 动态数组模板与struct结构
- [WordPress]模板相关文件结构与函数
- C++ BigInteger 结构体 模板
- 类模板&结构体模板的new运算
- 线段树模板(结构体)
- 自定义结构体通过模板实现
- 结构体 的优先队列 【模板】
- 结构体与指针
- 类与结构体
- 数组与结构体
- 类与结构体
- 结构体与类
- 结构体与类
- 图论练习1:银河英雄传说解题报告
- Python学习笔记
- sealed
- 软件开发培训
- 将assets文件中内容复制到SDCard中
- 结构体与模板
- AlertDialog弹窗
- 10.7 数列 2391
- 正则表达式初探
- Lost My Music 凸包+可持久化栈+倍增
- Apache的IO工具类
- spring框架
- git使用介绍及基本操作
- Mybatis延迟加载和查询缓存