组合

复合类(组合类):一个类的的对象是另外一个类成员变量(属性),那么前者被称为复合类。
组合类中的构造函数调用(先调用属性对象的‘构造函数’,再初始化另外部分)
组合类中如果出现交叉调用,需要进行前向声明
例如:Candidate类中成员中包含Voter,Voter类中又需要调用Candidate对象,则这两个类中的声明都需要加头文件包含和前向声明
Voter

*#ifndef Voter_hpp*
*#define Voter_hpp*
*#include"Person.hpp"*
*#include"PersonSet.hpp"*
*#include "Candidate.hpp"*
*#include <stdio.h>*
*#include<iostream>*
using namespace std;
class Candidate;
class Voter:public Person
{
private:
    int _polingStation;
    static int _totalNumVoters;
public:
    Voter(char *name,int age,int salary,int polingStation);
    void SetPolingStation(int PolingStation);
    void print();
    friend bool operator==(const Voter& v1,const Voter& v2);
    static int Voters()
    {
        return _totalNumVoters;
    }
    ***//使用Candidate类
    Person& SelectCandidate(PersonSet& candidate);
    void Vote(Candidate& aCandidate);***
};

*#endif /* Voter_hpp */*

Candidate

#ifndef Candidate_hpp
#define Candidate_hpp
#include"Person.hpp"
#include"PersonSet.hpp"
#include "Voter.hpp"
#include <stdio.h>
#include<iostream>
using namespace std;
class Voter;
class Candidate:public Person
{
private:
//Voter类作为Candidate类的成员变量
    Voter ** voter;         //存放每个候选人的投票者
    static int _numCandidates;
    int voter_size;             //实际投票者人数
    int _capacity;          //容量
public:
    Candidate(char *name,int age,int salary);
    int GetVotesNum();
    void AddVoter(Voter& avoter);
    friend ostream& operator<<(ostream& out,const Candidate& c);
    int GetAverageVotersAge();
    int GetAverageVotersSalary();
    friend bool operator<(const Candidate& c1,const Candidate& c2);
      ~Candidate();

    static int Candidates()
    {
        return _numCandidates;
    }
    void Reset()
    {
        voter_size = 0;
    }
};
#endif /* Candidate_hpp */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值