C ++ derived class relationship with the base class

The derived class and the base class has these relationships:

1. Public derived class inherits all members and member functions from the base class

2. Public derived class can not be accessed directly inherited from the base class private members , but can be inherited by a common interface to access .

3. Public derived class can not inherit the base class friend function .

4. The base class to the derived class is created first, before the derived class is the base class destructor.

The derived class constructor using the initialization list to initialize its members. In two ways: using the default constructor for the base class; explicitly call the constructor for the base class. If the initialization list nothing to write, the former is used by default.

 

Class declaration:

//Class.h -- Declaration of class
#ifndef _CLASS_H_
#define _CLASS_H_

#include <string>
using std::string;

class Player
{
public:
    enum career{WARRIOR,WIZARD,ASSASSIN};
    enum sex{MALE,FEMALE,UNKNOWN};
private:
    string player_name;
    sex player_sex;
    unsigned int player_level;
    career player_career;

public:
    Player(const string pn = "none",sex ps = MALE,unsigned int pl = 1,career pc = WARRIOR);
    ~Player();
    string get_career();
    sex get_sex(){return player_sex;};
    string get_name(){return player_name;};
    friend void welcome(const Player & pr);
};

//Derived from class Player
class RankedPlayer:Player
{
private:
    unsigned int ranking;
public:
    RankedPlayer(const string pn = "none",sex ps = MALE,unsigned int pl = 1,career pc = WARRIOR,unsigned int r = 999);
    unsigned int get_rank(){return ranking;};
    void show_rank();
};

#endif // _CLASS_H_

Class definition:

//ClassDefine.cpp -- Definition of class
#include "Class.h"
#include <iostream>

//Methods for class Player
Player::Player(const string pn,sex ps,unsigned int pl,career pc):player_name(pn),player_sex(ps),player_level(pl),player_career(pc)
{
    std::cout<<"New player joined in.\n";
}

Player::~Player()
{
    std::cout<<"Player "<<get_name()<<" has quited.\n";
}

string Player::get_career()
{
    string c;
    switch(player_career)
    {
        case WARRIOR:{c = "warrior";break;}
        case WIZARD:{c = "wizard";break;}
        case ASSASSIN:{c = "assassin";break;}
        default:{break;}
    }
    return c;
}

void welcome(const Player & pr)
{
    if(pr.player_sex == Player::MALE)
    {
        std::cout<<"Welcome "<<pr.player_name<<", his career is "<<pr.player_career<<".\n";
    }
    else if(pr.player_sex == Player::FEMALE)
    {
        std::cout<<"Welcome "<<pr.player_name<<", her career is "<<pr.player_career<<".\n";
    }
    else
    {
        std::cout<<"Welcome "<<pr.player_name<<".\n";
    }
}

//Methods for class RankedPlayer
RankedPlayer::RankedPlayer(const string pn,sex ps,unsigned int pl,career pc,unsigned int r):Player(pn,ps,pl,pc)
{
    ranking = r;
}

void RankedPlayer::show_rank()
{
    std::cout<<get_name()<<"("<<get_career()<<")"<<"'s ranking is: "<<ranking<<"\n";
}

Use categories:

//Use Class
#include "Class.h"

int main(void)
{
    Player p1;
    welcome(p1);

    Player p2("Joseph",Player::UNKNOWN,99);
    welcome(p2);

    RankedPlayer p3("Jotaro",Player::MALE,99,Player::WIZARD,1);
    //welcome(p3);
    p3.show_rank();

    return 0;
}

 

Guess you like

Origin www.cnblogs.com/banmei-brandy/p/11512076.html