数组类模板(c++)

本文探讨了C++中的数组类模板使用时需要注意的问题,包括:将函数模板的定义和声明放在头文件中以避免链接错误;理解深复制与浅复制的区别,特别是在涉及指针和数组时确保正确实现深复制;解释左值与右值的概念及其在编程中的应用;以及讨论返回对象引用的函数在重载运算符时的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组类模板(c++)

分析:
①函数声明和定义分别写在头文件和源文件中,出现链接错误;查看资料:被多个源文件引用的函数模板,应当把函数体一同放在头文件中,不能像普通普通函数一样只将声明放在头文件中。

②深复制与浅复制:系统默认生成的复制构造函数实现的是浅复制,浅复制是指将对应的数据成员一 一赋值;当数据成员是指针类型时,且该指针值是数组首地址时,浅复制只能将首地址赋值给另外一个同类型指针,两个指针指向同一个内存单元,并没有构造自己的数组来存放数组元素,这样在析构时,同一段内存单元会释放两次,出错。因此,这种情况应该使用深复制,即构造对象自己的数组,并将数组中的元素一 一赋值,这样两个对象的指针数据成员各自指向自己的内存单元。

左值与右值:左值在内存中有确定位置的对象,右值则相反;例如:a[0]=1,此时a[0]就是左值,它的值可以被改变。
关于左值右值:添加链接描述

④如果一个函数返回的是对象的引用,那么该对象的值是左值,因为引用是对象的别名,在使用时可以改变其值,例如c++中重载 ‘[]’ 、’=‘运算符时,返回的是对象的引用,因为a[i] = n和(a=b)++表达式都是允许的,而’+'是返回对象的值,因为 a+b=c 这样的表达式是不允许的。如果一个函数返回的是对象的值,它不应该作为左值。

#ifndef ARRAY_H
#define ARRAY_H
#include <cassert>

template <class T>
class Array
{
   
   
private:
	T *list;//存放数组首地址
	int size;
public:
	Array(int size=50);
	Array(const Array &a);
	~Array();

	Array& operator =(const Array &a);
	T& operator [](int n);
	operator T
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值