C/C++ 对象的添加与删除(一)

更详细的 内存分配、扩充内存、析构函数、迭代、操作符重载等内容,可以参考 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++ 对象的添加与删除(二),更详细的讲述了添加和删除对象时,内存的分配、释放、构造函数、析构函数、运算符重载 和 迭代器 等操作。希望对你有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值