当前位置: 首页 > article >正文

C++ 泛型编程:动态数据类模版类内定义、类外实现

类内定义的关键点在于,对应类型要写对,见以下代码例子:

#include<iostream>
using namespace std;
template<class T>
class dyArray {
private:
	T *members;
	int size1;

public:
	dyArray(int a):size1(a) {
		members = new T[a];
	}
	~dyArray() {
		delete[] members;
	}
	T& operator[](int id1) {
		return members[id1];
	}
	void updataID(int idx, T vul) {
		members[idx] = vul;
	}
};

int main() {
	dyArray<double> da1(100);
	da1[1] = 1;
	da1[2] = 8;
	cout << da1[0] << endl;
	cout << da1[1] << endl;

	dyArray<char> da2(10);
	da2[1] = 'a';
	da2.updataID(1, 'b');
	cout << da2[1] << endl;

	return 0;
}

类外实现:保留声明、拷贝声明、加作用域、拷贝实现、模版参数列表声明、指定虚拟类型

以这个为例,来看下这几步(这个是一个构造函数,我们来逐句看下分析内容):

dyArray(int a) :size1(a) {
	members = new T[a];
}

以下的代码例子可以在下述例子中找到,这里是为了说明取了部分内容

保留声明(也就是在类中保留类的声明)

template<class T>
class dyArray {
private:
    T *members;
    int size1;

public:
    dyArray(int a);
    ~dyArray();
    T& operator[](int id1);
    void updataID(int idx, T vul);
};

拷贝声明(将声明拷贝至类外)

template<class T>
dyArray<T>::dyArray(int a) :size1(a) {
    members = new T[a];
}

加作用域(加上类外的作用域)

template<class T>
dyArray<T>::dyArray(int a) :size1(a) {
    members = new T[a];
}

拷贝实现(将方法的实现拷贝到类外)

template<class T>
dyArray<T>::dyArray(int a) :size1(a) {
    members = new T[a];
}

模版参数列表声明

template<class T>
dyArray<T>::dyArray(int a) :size1(a) {
    members = new T[a];
}

指定虚拟类型

template<class T>
dyArray<T>::dyArray(int a) :size1(a) {
    members = new T[a];
}

见以下代码示例(均实现了类外实现):

#include<iostream>
using namespace std;
template<class T>
class dyArray {
private:
	T *members;
	int size1;

public:
	dyArray(int a);
	~dyArray();
	T& operator[](int id1);
	void updataID(int idx, T vul);
};
template<class T>
dyArray<T>::dyArray(int a) :size1(a) {
	members = new T[a];
}

template<class T>
T& dyArray<T>::operator[](int id1) {
	return members[id1];
}

template<class T>
dyArray<T>::~dyArray() {
	delete[] members;
}

template<class T>
void dyArray<T>::updataID(int idx, T vul) {
	members[idx] = vul;
}
int main() {
	dyArray<double> da1(100);
	da1[1] = 1;
	da1[2] = 8;
	cout << da1[0] << endl;
	cout << da1[1] << endl;

	dyArray<char> da2(10);
	da2[1] = 'a';
	da2.updataID(1, 'b');
	cout << da2[1] << endl;

	return 0;
}


http://www.kler.cn/a/473047.html

相关文章:

  • 卷积神经网络 (CNN, Convolutional Neural Network) 算法详解与PyTorch实现
  • STM32和国民技术(N32)单片机串口中断接收数据及数据解析
  • 软件23种设计模式完整版[附Java版示例代码]
  • MATLAB语言的正则表达式
  • gateway的路径匹配介绍
  • 每天你好20250108(距离春节21天!!!)
  • 嵌入式系统 (2.嵌入式硬件系统基础)
  • 文献阅读分享:ChatGPT在推荐系统中的偏见研究
  • 使用Qt实现json数据的格式检测并序列化输出 Qt5.4.0环境
  • 根据docker file 编译镜像
  • 入门嵌入式(六)——定时器
  • GPIO输入及两个应用案例
  • 『SQLite』解释执行(Explain)
  • benchANT 性能榜单技术解读 Part 1:写入吞吐
  • 金融租赁系统助力行业转型与升级的创新之路
  • 生成模型:变分自编码器-VAE
  • 产品经理-商业模式构建 - AxureMost
  • SparkStreaming集群调优
  • H2数据库在单元测试中的应用
  • 实时数仓:Apache Iceberg 的表管理与实时数仓架构设计
  • [读书日志]从零开始学习Chisel 第八篇:Scala的集合(敏捷硬件开发语言Chisel与数字系统设计)
  • MySQL error [Warning] InnoDB: Table mysql/innodb_index_stats has length
  • win32汇编环境,怎么进行乘法运算的
  • (一)使用 WebGL 绘制一个简单的点和原理解析
  • 《计算机视觉解锁图像理解密码:编程实现图片场景文字描述生成》
  • Ungoogled Chromium127 编译指南 MacOS篇(七)- 安装依赖包