C++派生类与基类的关系
派生类与基类有这些关系:
1.公有派生类从基类继承所有成员和成员函数
2.公有派生类无法直接访问从基类继承的私有成员,但可以通过继承的公共接口访问。
3.公有派生类无法继承基类的友元函数。
4.基类先于派生类被创建,派生类先于基类被析构。
5.派生类的构造函数使用初始化列表来初始化它的成员。两种方式:使用基类的默认构造函数;显式调用基类的构造函数。如果初始化列表什么都不写,则默认使用前者。
类声明:
//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_
类定义:
//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 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;
}
C++派生类与基类的关系的更多相关文章
- c++ 派生类向基类转换的可访问性
对于c++面向对象一直很疑惑,这次决定下功夫把它弄明白 一.派生类和基类之间的类型转换 首先理解,派生类含有基类的所有成分,只不过有些就算在派生类的成员函数也不能访问而已. (1)派生类和基类的自动转 ...
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
一.不能自动继承的成员函数 构造函数 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类 ...
- C++ 派生类到基类转换的可访问性
今天看c++ primer关于派生类到基类转换的可访问性,看的很晕,看了下面的文章恍然大悟: http://www.2cto.com/kf/201403/283389.html C++ primer第 ...
- c++——派生类和基类转换(类型兼容性原则)
基类也叫父类,派生类也叫子类. 类之间的继承关系继承关系是类之间的父子关系. 继承关系的特点如下:A. 子类拥有父类的所有属性和行为B. 子类也是一种特殊的父类C. 子类对象可以当父类对象使用D. 子 ...
- C++_派生类的构造函数及派生类和基类之间的特殊关系
派生类和基类的概念及派生类构造函数的原理: 创建一个叫做TableTennisPlayer的基类,记录会员的名字和是否有球桌. //声明一个基类 class TableTennisPlayer { p ...
- C#中派生类调用基类构造函数用法分析
这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数例如: ? 1 2 3 4 5 6 7 8 9 10 11 ...
- 转 关于C#中派生类调用基类构造函数的理解
关于C#中派生类调用基类构造函数的理解 .c#class 本文中的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1. 当基类中没有自己编写构造函数时,派生类默认的调用 ...
- c++中派生类对基类成员的三种访问规则(转)
C++中派生类对基类成员的访问形式主要有以下两种:1.内部访问:由派生类中新增成员对基类继承来的成员的访问.2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中 ...
- c++ primer 学习杂记2【派生类到基类转换的可访问性】
参考: http://blog.csdn.net/rehongchen/article/details/7930853 http://blog.csdn.net/ming_road/article/d ...
随机推荐
- 第四方 fast快捷支付封装
class Fastpay { protected $conf = [ 'appkey'=>'',//appkey 'key'=>'',//秘钥 ]; protected $http_ty ...
- logback1.11的一个bug:有线程持续不断写入log文件,log文件就不会按设定以日期切换。
此Bug的解决方案请见:https://www.cnblogs.com/xiandedanteng/p/12205422.html logback是log4j的后继者,作者也是同一人,但其中的bug不 ...
- Java实现获取命令行中获取指定数据
执行ipconfig /all获取主机所有网卡信息并分析这些字符串,提取出有效网卡(网卡名称,mac地址,ipv4地址,掩码,网关,dns)将网卡插入HashMap中,key是网卡的名称,value是 ...
- latex tips
latex tips latex 插入图片 主要是插入图片位置的问题,代码中的 bb= 决定了插入 fig2.eps 图片的某一方形区域,其中 表示该方形区域的左下角像素坐标是 0 0 ...
- 记一次奇怪的cookie丢失
.net给Image控件设置一个空图片路径的时候出现丢失cookie 比如说, img_path.ImageUrl ="../"+ ds.Tables[0].Rows[0][&q ...
- jzoj 6797. 【2014广州市选day2】hanoi
Description 你对经典的hanoi塔问题一定已经很熟悉了.有三根柱子,n个大小不一的圆盘,要求大盘不能压在小盘上,初始时n个圆盘都在第一根柱子上,最少要多少步才能挪到最后一根柱子上? 现在我 ...
- python 3 for嵌套
- [Leetcode]585. 2016年的投资(MySQL)
题目 写一个查询语句,将 2016 年 (TIV_2016) 所有成功投资的金额加起来,保留 2 位小数. 对于一个投保人,他在 2016 年成功投资的条件是: 他在 2015 年的投保额 (TIV_ ...
- [补题][Codeforces478D]Red-Green Towers(DP)
题目链接 http://codeforces.com/problemset/problem/478/D 题意 叠放塔:有红.绿两种色块.从第一层开始,第一层1块,第二层2块,第i层i块. 要求每一层只 ...
- 微服务架构之SpringCloud
微服务架构之SpringCloud介绍 1.什么是微服务 2.SpringCloud架构 3.SpringCloud组件 4.微服务相关技术 Docker Jenkins