处理断点问题

本文探讨了在实现C++ Vector类时遇到的成员函数返回问题和析构问题。在处理成员函数返回时,从最初的指针返回改为直接返回,引入复制构造函数以解决累加操作。而在析构问题上,由于默认析构函数无法释放动态分配的内存,作者通过调试发现了解决方案,解决了导致断点的问题,保证了内存的正确管理。
摘要由CSDN通过智能技术生成

一、来源

这是关于C++定义Vector类作业中出现的问题
作业要求如下:

向量是一种很重要的数据类型,表达了一个相同类型数据的有序集合。定义一个向量类
Vector(开头字母不能用小写,否则会冲突),使得向量类型具有如下性质和功能:
(1)向量元素个数没有限制。
(2)向量对象可分为行向量和列向量,提供向量的转置操作,行向量转置变为列向量,列
向量转置变为行向量。
(3)相同维数的向量加法、减法,向量的加法和减法仍然是一个向量,结果向量的每个元
素为两个向量对应元素的和或差。
(4)相同维数的向量内积,行向量乘以列向量结果为一个标量(单个值)。
(5)获取向量的维数。
(6)获取向量的最大容量。
(7)向量的下标操作获取向量的一个元素。
(8)向量值的输入和输出。
(9)可在向量的空间尾部追加元素,可按照向量中元素的位置删除向量元素。
注:
(1)对象中的向量元素容量采用动态方法(使用堆空间)。动态方法中,一般初始容量是初始向量元素个数的 2 倍。一旦向量元素增加到大于容量,就需要重新申请新的堆空间,新的堆空间容量应该要翻倍,需要将原向量中的元素值复制到新的空间中,然后删除原有的堆空间,当然这样的操作对于对象使用者来说是透明的。
(2)要区分行向量和列向量,可以考虑用添加一个属性标志的方法来解决。
(3)行向量只能加减行向量,列向量只能加减列向量
(4)内积运算符为“*”,只要定义行向量与列向量的运算即可。
(5)向量的维数是指向量的元素个数。

二、初稿

最开始的时候就按自己的思路写了,然后遇到了几个小问题:
(1)关于成员函数返回问题
(2)关于析构问题
类结构:

#pragma once
#ifndef  _VECTOR_H
#define  _VECTOR_H
class Vector
{
   
	int* v;             	//指向一个数组,表示向量
	int sz;					//容量
	int dms;				//维度
	bool s;					//类型:0->行向量 1->列向量
public:
	Vector();
	Vector(int D, int* Datas,bool ss);		//定义构造函数
	~Vector();							//定义析构函数
	int getsize();						//得到容量
	int getdimension();					//得到维度
	void display();						//输出
	void change();						//类型转化
	int& operator[](int);
	Vector* operator+(Vector&);			//向量加法
	Vector* operator-(Vector&);			//向量减法
	int operator*(Vector&);				//向量点积
	void add(int);						//尾部追加	注意最大容量问题
	void Delete(int);					//定位删除
};//-----------------------------------
#endif

(1)关于成员函数返回问题

写第一稿的时候因为想避开返回是引用还是直接返回,就用了指针返回,但是后来想了想还是不太好,用指针返回不能实现累加。

Vector* Vector::operator+(Vector& another)
{
   
	if (this->dms != another.dms)
		return NULL;
	else
	{
   
		Vector* result;                  //定义Vector类指针表示运算结果
		result = new Vector(this->dms,this->v,this->s);      //为结果分配空间
		int i;
		for (i = 0; i < dms; i++)
			result->v[i] = this->v[i] + another.v[i];
		return result;
	}
}

为了解决累加问题,最后还是把指针改掉了,而很显然,对于局部类result,是不能引用返回的,而直接返回由于类中*v的存在就需要重新定义复制构造函数。
有了复制构造函数后,成员函数就变成了这样:

Vector Vector::operator+(Vector& another)
{
   
	Vector temp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值