C++第十三次作业(拷贝构造函数_对象数组)

文章目录:

学习一下

一:c++拷贝构造函数 

二:c++对象数组 

 习题:C++定义一个采用顺序存储的线性表类,用以存储一批递增排序的整数

代码实现

运行结果


学习一下

一:c++拷贝构造函数 

    1.功能:用于自动复制本类的已有对象,是使用同一类中之前创建的对象来初始化新创建的对象
        1.1 通过使用另一个同类型的对象来初始化新创建的对象
        1.2 复制对象把它作为参数传递给函数
        1.3 复制对象,并从函数返回这个对象
        1.4 如果在类中没有定义拷贝构造函数,编译器会自行定义一个
        1.5 如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数
        1.6 函数的最常见形式如下:
            classname (const classname &obj) {// 构造函数的主体}

	2.拷贝构造函数声明和定义方法(语法)
    ------------------------------------------------------------
		class 类名
	    {	
            public:
			    类名(形参表);	//构造函数
			    //……………………
			    ~类名( );	//析构函数
			    类名(类名 &对象名);	//拷贝构造函数的声明
		    private:
			    //……………………
        };
		    类名::类名(类名 &对象名)	//拷贝构造函数的实现
		{	//…………//函数体}
    ------------------------------------------------------------
     Line( const Line &obj);      // 拷贝构造函数

    Line::Line(const Line &obj)
    {
        cout << "调用拷贝构造函数并为指针 ptr 分配内存" << endl;
        ptr = new int;
        *ptr = *obj.ptr; // 拷贝值
    }
    //注意这里析构函数的作用
    Line::~Line(void)
    {
        cout << "释放内存" << endl;
        delete ptr;
    }
    ------------------------------------------------------------

	3.拷贝构造函数的调用:用已有对象初始化另一对象
        class Point
		{	
            public:
				Point(double cx=0,double cy=0){ x=cx; y=cy;	}
				Point(Point &p);
				void Show( ){	cout<<x<<” , “<<y<<endl;	}
				void Getxy(double &dx,double &dy){ dx=x; dy=y;	}
			private:
				double x,y;
		};

		Point::Point(Point &p)
		{	x=P.x;	y=P.y;
			cout<<”Copy constructor is called!”<<endl;
		}

		void main( )
		{	Point A(1,5);
			Point B(A);	//用已有对象初始化另一对象
			A.Show( );	B.Show( );
		}

二:c++对象数组 

    1.静态数组
		Point PA[5];Point PB[5]={Point(1,2),Point(-5,20),Point(10,-30) };

	2.动态数组
		Point *PA=new Point[5];

数据结构(c++ ) 线性表(一) 顺序存储的实现:https://blog.csdn.net/qq_35794278/article/details/80099335

线性表的顺序存储结构的C++类实现:https://blog.csdn.net/qq_37901567/article/details/77921223

数据结构线性表之顺序存储结构(C++)https://www.cnblogs.com/llz568900059/p/9956707.html

线性表的顺序存储实现和操作(C/C++代码):https://blog.csdn.net/weixin_40270383/article/details/85677246 

怎么实现线性表(顺序表)的排序(C语言):https://bbs.csdn.net/topics/391939437

 习题:C++定义一个采用顺序存储的线性表类,用以存储一批递增排序的整数

代码实现

#include <iostream>
using namespace std;
#define INIT_LISTSIZE 100


class IntList
{
	private:
		int *Base;		//基地址
		unsigned Nodes;	//线性表的有效长度(实际元素个数)
		int ListSize;	//线性表的大小(最多存储元素个数)
		bool IsEmpty;
	public:
		IntList(unsigned n);	//构造函数,n是元素个数
		~IntList()
		{
			delete []Base; 
			Nodes=0; //实际的
			cout<<"线性表被销毁!"<<endl;
		};	
		//自行完成
		void ShowList();//输出线性表
		int Length()
		{
			return Nodes;	//实际个数
		}	
		//返回线性表的有效长度
		int value(unsigned item)
		{ 
			return Base[item-1];
		}
		//返回第item个元素,插入
		void InsertNum(int num);//在现有线性表中插入元素num
	};

//构造函数
	IntList::IntList (unsigned n)//元素个数
	{	
		Nodes=n;
		if(Nodes==0)//如果个数为0
		{ 
			IsEmpty=1;
			return;//那么为空 直接退出
		}
		Base=new int[INIT_LISTSIZE];//申请内存,首地址
		ListSize=INIT_LISTSIZE;
		if(n>ListSize)
		{
			cout<<"线性表长度过大;";
			return;
		}


		cout<<"请输入"<<n<<"个整数:"<<endl;
		//以下按——插入排序输入并存储整数
		unsigned i,j,k;
		cin>>Base[0];//基地址
		for(i=1;i<n;i++)
		{	
			int temp;
			cin>>temp;//输入插入的数
			for(j=0;j<i;j++)
			{
				if(temp<Base[j])//如果输入的数小于原来的数 ,大于不管正常的
					break;//那么就跳出,开始交换
			}
			for(k=i;k>j;k--)//从j到i
			{
				Base[k]=Base[k-1];//插入到原来数的前面,这里原来的值前移了1个
			}
			Base[j]=temp;//将输入的值传给原来的值
		}
	}
//输出
	void IntList::ShowList()
	{
		for(unsigned i=0;i<Nodes;i++)
			cout<<Base[i]<<"\t";
		cout<<endl;
	}
//插入
	void IntList::InsertNum(int num)
	{
		unsigned i,j;
		for(i=0;i<Nodes;i++)
			if(num<Base[i])//输入的数小于原来的
				break;
		for(j=Nodes;j>i;j--)
			Base[j]=Base[j-1];
		Base[i]=num;
		Nodes++;
	}

int main( )
{
	int n;
	cout<<"输入要输入的整数个数:";
	cin>>n;
	IntList intlist(n);//构造函数
	intlist.ShowList();//输出

	int num;
	cout<<"输入要插入的数:";
	cin>>num;
	intlist.InsertNum(num);//插入
	intlist.ShowList();//输出

	system("pause");
	return 0;
}

运行结果

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘鑫磊up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值