更详细的 内存分配、扩充内存、析构函数、迭代、操作符重载等内容,可以参考 C/C++ 对象的添加与删除(二) 。
一、编程要求:
1、定义一个Date类:
变量:年,月,日
函数:构造函数,获取函数,设置函数,输出函数
2、 定义一个Person类:
变量:组合,Date d,*name,*address
函数:构造函数,析构函数,输出函数
3、普通函数(不属于以上两个大类,以防误解):
addPerson函数,把对象添加到array
showArray函数,把数组中所有的Person信息展示
delPerson函数,删除_index对象
4、测试:创建5个Person对象
调用addPerson函数,把对象添加到array
调用showArray函数,把数组中所有的Person信息展示
调用delPerson函数,删除数组中index位置的Person
二、Date类
class Date{
private:
int year;
int month;
int day;
public:
// 构造函数
Date(int _year,int _month,int _day):year(_year),month(_month),day(_day){}
// 获取函数
int getYear()const { return year; }
int getMonth()const { return month; }
int getDay()const { return day ; }
// 设置函数
void setYear(int _year) { year = _year; }
void setMonth(int _month) { month = _month; }
void setDay(int _day) { day = _day; }
// 输出函数
void date_print(){
cout<<"year is "<<year<<endl;
cout<<"month is "<<month<<endl;
cout<<"day is "<<day<<endl;
}
};
三、Person类
class Person{
private:
Date d; // 表示一个人的出生日期,组合
char *name ; // 指针,堆空间
char *address; // 地址,堆空间
public:
// 构造函数
Person(int _year,int _month,int _day,char *_name,char *_address):d(_year,_month,_day){ //构造函数
this->name = new char[strlen(_name)+1];
this->address = new char[strlen(_address)+1];
strcpy(this->name, _name);
strcpy(this->address, _address);
}
// 析构函数
~Person(){
if (name != NULL)
{
delete []name;
cout<<"free..."<<endl;
name = NULL;
}
if (address != NULL)
{
delete []address;
address = NULL;
}
}
// 输出函数
void person_print(){
d.date_print();
cout<<"name is "<<name<<endl;
cout<<"address is "<<address<<endl<<endl;
}
};
四、普通函数
提示: 这段代码不需要放在任何一个类里面,它只是一个普通函数,可以放在公共部分。
void addPerson(int &_size,int &_capcity,Person **_array,Person &_p){
if (_size < _capcity)
_array[_size ++] = &_p;
}
//把数组中所有的Person信息展示
void showArray(int &_capcity,Person** _array){
for(int i=0; i<_capcity; ++i)
(*_array[i]).person_print();
}
//删除下标_index对象
void delPerson(int _index,int &_size ,Person**_array){
if (_index < _size)
{
_size --;
for (int i=_index; i<_size; i++ )
_array[i] = _array[i+1];
}
}
五、main函数
int main(int argc, const char * argv[]){
//按要求创建5个Person对象,
Person p1(2007,6,18, (char*)"Jamas" ,(char*)"Cavas");
Person p2(2011,6,24, (char*)"Wade" ,(char*)"Heat");
Person p3(2012,6,20, (char*)"Bosh" ,(char*)"Heat");
Person p4(2013,5,31, (char*)"Alen" ,(char*)"Thunder");
Person p5(2016,6,23, (char*)"Irving",(char*)"Cavas");
int capcity = 5; //总共可以存储多少个元素
int size = 0; //目前已经存储了多少个元素
Person* *array = new Person*[capcity];
//调用addPerson函数,把对象添加到array
addPerson(size, capcity, array, p1);
addPerson(size, capcity, array, p2);
addPerson(size, capcity, array, p3);
addPerson(size, capcity, array, p4);
addPerson(size, capcity, array, p5);
//调用showArray函数,把数组中所有的Person信息展示
showArray(capcity, array);
//手动输入要删除的下标
cout<<"删除下标对象?"<<endl;
int n;
cin>>n;
//调用delPerson函数,删除数组中index位置的Person
delPerson(n, size, array);
showArray(size, array);
delete []array;
array = NULL;
}
值得一读的话,都有源码哦:
另一篇文章 C/C++ 对象的添加与删除(二),更详细的讲述了添加和删除对象时,内存的分配、释放、构造函数、析构函数、运算符重载 和 迭代器 等操作。希望对你有帮助。