首先本项目主要是对C++里 面的一些 基础知识和概念进行练习,主要包括:const型函数,函数的返回值,引用,类的组合,以及内存的分配。
下面直接把各个文件的代码写上:
// // Date.h // train2 // // Created by student on 15/8/4. // Copyright (c) 2015年 personals. All rights reserved. // #ifndef train2_Date_h #define train2_Date_h class Date{ public: Date(); Date(int year,int month,int day); void print(); private: int y,m,d; }; #endif
// // Date.cpp // train2 // // Created by student on 15/8/4. // Copyright (c) 2015年 personals. All rights reserved. // #include <iostream> using namespace std; #include "Date.h" Date::Date(){ y=2015; m=1; d=1; } Date::Date(int year,int month,int day){ y=year; m=month; d=day; } void Date::print(){ cout<<"birthday is :"<<y<<"/"<<m<<"/"<<d<<endl; }
// // Person.h // train2 // // Created by student on 15/8/4. // Copyright (c) 2015年 personals. All rights reserved. // #ifndef train2_Person_h #define train2_Person_h #include "Date.h" class Person{ public: Person(); Person(char *Name,char *Email,int day,int month,int year); char * getName(); char * getEmail_Address(); Date& getBirthday(); void print(); private: char *name; char *email; Date date; }; #endif
// // Person.cpp // train2 // // Created by student on 15/8/4. // Copyright (c) 2015年 personals. All rights reserved. // #include "Person.h" #include <iostream> #include <stdlib.h> using namespace std; #include "string.h" Person::Person():date(2015,1,1){ char n1[]="hh"; char n2[]="[email protected]"; name =n1 ; email =n2; } Person::Person(char *Name,char *Email,int day,int month,int year):date(year,month,day){ name = (char *)malloc(sizeof(char)*20); email = (char *)malloc(sizeof(char)*20); strcpy(name,Name); strcpy(email,Email); } char * Person::getName(){ return name; } char * Person::getEmail_Address(){ return email; } void Person::print(){ cout<<"name="<<name<<",email="<<email<<endl; date.print(); } Date& Person::getBirthday(){ return this->date; }
//PersonSet是Person的容器,即Person的集合; // PersonSet.h // train2 // // Created by student on 15/8/4. // Copyright (c) 2015年 personals. All rights reserved. // #ifndef train2_PersonSet_h #define train2_PersonSet_h #include "Person.h" class PersonSet{ public: PersonSet(int capacity=9,int initial_size=0); ~PersonSet(); public: void Add(Person & element);//增加peson成员; Person & NextElement(); //迭代下一个对象; Person & RemoveElement(); //删除最后一个Person对象,并返回; Person & RemoveElement(int index); //删除第index个对象,并返回; void reset(); //将容器重置大小为0; int size() const; //返回容器里的Person对象的数量; void print() const; private: Person ** _elements; int _capacity; //容量 int _size; //对象个数 int _index; //索引值 //static int count; }; //int PersonSet::count=0; #endif
// // PersonSet.cpp // train2 // // Created by student on 15/8/4. // Copyright (c) 2015年 personals. All rights reserved. // #include <iostream> using namespace std; #include "PersonSet.h" PersonSet::PersonSet(int capacity,int initial_size){ _capacity = capacity; _size = initial_size; _elements = new Person * [_capacity]; //count++;_size = count; } int PersonSet::size() const{ return _size; } //增容原理:1.先定义一个对象的二级指针指向原对象的二级指针 //2.根据需要给原对象重新开辟空间 //3.通过第一步定义的指针给新开辟的对象指针复制 //4.最后删除定义的指针。 void PersonSet::Add( Person& aPerson ) { // Relocate the array space if ( _size == _capacity ) { Person** temp = _elements; _elements = new Person*[_capacity*2]; for( int i=0; i<_size; i++ ) { _elements [i] = temp[i]; } _capacity*= 2; delete temp; } _elements[_size++] = &aPerson; } Person& PersonSet:: RemoveElement() { _size--; Person* p = new Person; p=_elements[_size]; //shrink the container if(_size < _capacity/2) { cout << "shrinking ! Capacity is "<<_capacity<<endl; Person** temp = _elements; _elements= new Person*[_capacity/2]; for ( int i=0; i<_size; i++ ) { _elements [i]= temp[i]; } _capacity /= 2; delete temp; } return *p; } Person& PersonSet::NextElement() { Person* p = new Person; if (_elements[_size]!=NULL) { p = _elements[_size]; _size++; } else { delete p; p=NULL; } return *p; } void PersonSet::reset(){ _size=0; } void PersonSet::print() const{ int i=0; for (; i<_size; i++) { cout<<"name:"<<_elements[i]->getName()<<endl; } } Person& PersonSet::RemoveElement(int index){ Person* p = new Person; if (index>_size || index<=0) { cout<<"index is out of side!\n"; p = NULL; return *p; } int x; Person *p1 = _elements[--index]; for(x=index;x<_size-1;x++){ _elements[x]=_elements[x+1]; } int i = _size-1; _elements[i] = p1; *p = RemoveElement(); return *p; } PersonSet::~PersonSet(){ }
// // main.cpp // train2 // // Created by student on 15/8/4. // Copyright (c) 2015年 personals. All rights reserved. // #include <iostream> #include <iostream> #include <string.h> #include "Date.h" #include "Person.h" #include "PersonSet.h" using namespace std; int main(int argc, const char * argv[]) { //declare some const persons Person *p1 = new Person("Lou", "[email protected]", 20, 6, 1960); Person *p2 = new Person("Frank", "[email protected]", 20, 3, 1967); Person *p3 = new Person("Ann", "[email protected]", 20, 8, 1960); PersonSet boys, girls; boys.Add(*p1); //test to see if the same object is retrieved from the set. if (p1 != &boys.RemoveElement() ) { cout << "ERROR: the objects are different \n"; } else { cout << "Good, the objects are the same \n"; } boys.Add( *p1); boys.Add( *p2); girls.Add( *p3); boys.Add(*(new Person("John", "[email protected]", 20, 3, 1967))); girls.Add(*(new Person("Sue", "[email protected]", 20, 3, 1967))); boys.Add(*(new Person("Frank", "[email protected]", 25, 4, 1958))); girls.Add(*(new Person("Mary", "[email protected]", 25, 4, 1955))); boys.Add(*(new Person("John", "johnchat.ca", 12, 12, 1970))); //print all the boys using the removeSomeElement() method and delete //them int numberOfBoys = boys.size(); cout << "number of boys = " << numberOfBoys << "\n"; for(int i = 0; i<numberOfBoys; i++) { Person & boy = boys.RemoveElement(); if (&boy == NULL) { break; } boy.print(); delete &boy; } cout << "number of girls = " << girls.size() << "\n"; girls.print(); //print of the girls birthdays and using the someElement() method*/ int numberOfGirls =girls.size(); girls.reset(); for(int i = 0; i<numberOfGirls; i++) girls.NextElement().getBirthday().print(); //delete all the girls from the heap Person& hh=girls.RemoveElement(3); hh.print(); delete &hh; numberOfGirls = girls.size(); for(int i = 0; i<numberOfGirls; i++) { Person & her = girls.RemoveElement(); her.print(); delete &her; } return 0; }
时间: 2024-10-09 19:51:35