文章目录:
习题: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;
}
运行结果