C++第一个综合项目

首先本项目主要是对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

C++第一个综合项目的相关文章

java架构师大型分布式综合项目实战、千万高并发

* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat

java设计模式综合项目实战视频教程

java设计模式综合项目实战 视频课程目录如下: 第01节课:本课程整体内容介绍:X-gen系统概况,包括:引入.X-gen项目背景.X-gen的HelloWorld第02节课:X-gen整体介绍,包括:系统整体功能概述.外部主题功能概述.高层结构概览第03节课:配置管理模块的详细功能.功能边界.对外的数据接口第04节课:配置管理模块对外的程序接口.简单实现(先不用设计模式).对外的数据模型第05节课:引入并代码实现简单工厂模式和单例模式第06节课:引入桥接模式,代码实现第一部分第07节课:继续

第一个团队项目——成员及项目简介

第一个团队项目——成员及项目简介 一.项目名称 <校园封神榜> 二.团队成员简介 贾兆款.宋海林.张江鹏.禹慧慧 三.项目背景 在大学里的学习,似乎比高中轻松了很多,那是因为很多时候我们觉得无事可做,更重要的一个原因是很多同学不知道该做些什么.其实,在大学里,我们需要学习很多知识,如为人处事的方法.自我学习的方法.与人交流的方法,最重要的是与人合作的技巧和方法.等我们走上工作岗位以后,我们需要迅速融入一个集体,这就少不了需要和陌生的同事进行合作开发项目,尤其是对于从事信息行业的同学而言.因此,

java架构师大型分布式综合项目实战,高并发,集群,高可用,程序设计,性能优化,架构设计,负载均衡,大数据量

* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat

web集群综合项目keepalived+lvs+lamp+nfs+mysql

web集群综合项目 实验描述: 在此项目中,为了使公司内部的web站点提供更稳定的服务,搭建负载均衡群集以及故障转移群集,具体拓扑环境如下: 实验环境: 主机 Ip地址 软件 主调度器 192.168.100.150 kernel-devel openssl-devel popt-devel  ipvsadm keepalived-1.2.13.tar.gz 从调度器 192.168.100.151 kernel-devel openssl-devel popt-devel  ipvsadm k

Java基础学习笔记二十八 管家婆综合项目

本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添加账务 编辑账务 删除账务 项目环境搭建 技术选型和jar包介绍 每个项目都要使用一些已经成熟的技术,它们通常是由一些专业组织或团队所提供的开源免费技术.在今后的学习过程中,我们会逐渐对这些专业组织有所了解.本项目中使用的技术如下: apache的commons组件: commons-dbutils

医疗平台:我的第一个大项目

从四月以来,就一直跟着公司的师兄师姐们在做网络虚拟诊疗学习平台,可以说这算是我的第一个比较正式的大项目了,同时也是第一次跟那么多一起合作. 因为一开始没有开发这种大项目的经验,感觉吃了很多亏一开始. 总结一下,因为一开始再看文档,卧槽完全被文档牵着走,然后因为需求自己都不太明确,所以云里雾里.同时,我们公司居然用的自己的模板,唉,以前没弄过连MVC开发方式都不熟悉,SVN到用起来非常方便有没有. 再是熟悉模板,我去我们公司的框架其实很简单,当初为什么花了那么久才能理解,我现在想想当时脑子的是糊的

综合项目三

综合项目三 项目背景: 我院107实验室是网络综合实验室,现有计算机若干台,使用一台二层交换机连接各台电脑.实验室出口是一块三层交换机,与1号楼的出口路由器相连.平时在实验室内,教师和学生能够相互通信.现发现部分同学实验课上偷偷上网.现在要求:实验课上老师和同学们能够通信,教师可以上网,同学们可以发送邮件等,不能访问www服务.假如你是107实验室管理员,请你完整以上要求. 计算机名 Ip 网关 掩码 Vlan SB F0/2 192.168.30.1/24 R1 F0/0 192.168.30

人生第一个上线项目总结

此时,项目公测第一天,项目组集体坐在公司值班,等待着用户反馈,鉴于之前已经做过为期半个月的内测,于是,公测的第一天晚上似乎不是多么紧张. 毕业后,就进入现在公司,开始了现在项目.历时一年,很快.快结束的现在,总觉得自己应该总结下这一年发生的事情,于是,便记在这里,供自己"回眸".从程序员的角度看问题,更多. 使用技术:服务器,Linux + Java:客户端,Unity3D(主要NGUI). 项目框架: 服务器 客户端 1.登录服务器. 2.主要服务器M. 3.服务器G. 4.服务器D