派生类与基类有这些关系:

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++派生类与基类的关系的更多相关文章

  1. c++ 派生类向基类转换的可访问性

    对于c++面向对象一直很疑惑,这次决定下功夫把它弄明白 一.派生类和基类之间的类型转换 首先理解,派生类含有基类的所有成分,只不过有些就算在派生类的成员函数也不能访问而已. (1)派生类和基类的自动转 ...

  2. 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换

    一.不能自动继承的成员函数 构造函数 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类 ...

  3. C++ 派生类到基类转换的可访问性

    今天看c++ primer关于派生类到基类转换的可访问性,看的很晕,看了下面的文章恍然大悟: http://www.2cto.com/kf/201403/283389.html C++ primer第 ...

  4. c++——派生类和基类转换(类型兼容性原则)

    基类也叫父类,派生类也叫子类. 类之间的继承关系继承关系是类之间的父子关系. 继承关系的特点如下:A. 子类拥有父类的所有属性和行为B. 子类也是一种特殊的父类C. 子类对象可以当父类对象使用D. 子 ...

  5. C++_派生类的构造函数及派生类和基类之间的特殊关系

    派生类和基类的概念及派生类构造函数的原理: 创建一个叫做TableTennisPlayer的基类,记录会员的名字和是否有球桌. //声明一个基类 class TableTennisPlayer { p ...

  6. C#中派生类调用基类构造函数用法分析

    这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数例如: ? 1 2 3 4 5 6 7 8 9 10 11 ...

  7. 转 关于C#中派生类调用基类构造函数的理解

    关于C#中派生类调用基类构造函数的理解 .c#class       本文中的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.  当基类中没有自己编写构造函数时,派生类默认的调用 ...

  8. c++中派生类对基类成员的三种访问规则(转)

    C++中派生类对基类成员的访问形式主要有以下两种:1.内部访问:由派生类中新增成员对基类继承来的成员的访问.2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中 ...

  9. c++ primer 学习杂记2【派生类到基类转换的可访问性】

    参考: http://blog.csdn.net/rehongchen/article/details/7930853 http://blog.csdn.net/ming_road/article/d ...

随机推荐

  1. vue 在模板template中变量和字符串拼接

    例子:  :post-action="'/api/v1/reportPage/'+this.selectedPagerId+'/saveimg/'"

  2. TinkPHP框架开发的CRMEB小程序商城v4.0二次开发集成支付宝支付

    前言 大家都知道支付宝支付和微信支付宝都只能局限在自己的平台,微信内支付宝支付是根本就不能使用,即使是公众号支付也需要跳转到外部浏览器才可以唤起支付宝支付,并且QQ浏览器唤起支付宝支付还是问题很多,所 ...

  3. Java实现的二叉堆以及堆排序详解

    一.前言 二叉堆是一个特殊的堆,其本质是一棵完全二叉树,可用数组来存储数据,如果根节点在数组的下标位置为1,那么当前节点n的左子节点为2n,有子节点在数组中的下标位置为2n+1.二叉堆类型分为最大堆( ...

  4. Labview学习之路(十)文本文件再次写入不覆盖

  5. 网络请求以及网络请求下载图片的工具类 android开发java工具类

    package cc.jiusan.www.utils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; ...

  6. CVPR2020 面向密集多角度物体检测的动态修正网络(DRN)

    论文链接:https://arxiv.org/pdf/2005.09973.pdf code:https://github.com/Anymake/DRN_CVPR2020 文章概要: 本文是中科院自 ...

  7. IDEA Activiti 画图中文乱码

    画流程图时,如果节点的name填写的是中文,再次打开流程图时中文会显示乱码,如下图: 修改idea64.exe.vmoptions文件,在文件中加上如下代码: -Dfile.encoding=utf- ...

  8. vue父子组件状态同步的最佳方式

    哈喽!大家好!我是木瓜太香,一位老牌儿前端工程师,平时我们在使用 vue 开发的时候,可能会遇到需要父组件与子组件某个状态需要同步的情况,通常这个是因为我们封装组件的时候有一个相同的状态外面要用,里面 ...

  9. Spring框架学习笔记(1)

    Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...

  10. 虚拟PWN初探

    前言 之前看到星盟Q群里面的消息,Freedom师傅在B站直播关于虚拟pwn入门的公开课,然后就去听了一波,感觉受益匪浅.之前一直以为虚拟pwn是超级复杂的东西,今年打比赛也遇到了好几次,一直无从下手 ...