C++——数组类模板
1.模板参数可以是数值型参数非类型参数模板参数是在编译阶段被处理的单元所以在编译阶段必须准确无误的唯一确定变量、浮点数、类对象不能作为模板参数示例使用模板参数计算12...N#include iostream #includestring using namespace std; templatetypename T, int N void func(){ T a[N] {0}; for (int i 0; i N; i) { a[i] i; } for (int i 0; i N; i) { cout a[i] endl; } } templateint N class Sum { public: static const int VALUE SumN - 1::VALUE N; }; //类模板特化 template class Sum1 { public: static const int VALUE 1; //静态常量属于类本身无需创建对象即可访问 }; int main() { //Sum100 会在编译期通过这种递归推导直接算出 12...100 5050运行时只是把这个预计算好的常量值打印出来 cout 123...100 Sum100::VALUE endl; //123...1005050 return 0; }使用分文件的方式Complex.h#pragma once templatetypename T,int N class Array { T m_array[N]; public: int length(); bool set(int index, T value); bool get(int index, T value); T operator[](int index); T operator[](int index) const; //数组类对象有可能是const对象 virtual ~Array(); //如果该类有可能被继承则将析构函数写为虚函数 }; templatetypename T,int N int ArrayT, N::length() { return N; } templatetypename T,int N bool ArrayT, N::set(int index, T value) { bool ret (0 index) (index N); if (ret) { m_array[index] value; } return ret; } templatetypename T, int N bool ArrayT, N::get(int index, T value) { bool ret (0 index) (index N); if (ret) { value m_array[index]; } return ret; } templatetypename T, int N T ArrayT, N::operator[](int index) { return m_array[index]; } templatetypename T, int N T ArrayT, N::operator[](int index) const { return m_array[index]; } templatetypename T,int N ArrayT, N::~Array() { }main.cpp#include iostream #includestring using namespace std; #include Complex.h int main() { Arraydouble, 5 ad; for (int i 0; i ad.length(); i) { ad[i] i * i; } for (int i 0; i ad.length(); i) { cout ad[i] endl; } return 0; }运行结果014916
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2416071.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!