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 ...
随机推荐
- Docker 网络模式详解及容器间网络通信
当项目大规模使用 Docker 时,容器通信的问题也就产生了.要解决容器通信问题,必须先了解很多关于网络的知识.Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜 ...
- 【Android】Listview返回顶部,快速返回顶部的功能实现,详解代码。
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...
- [易霖博YCTF]Web WriteUp
中午队里师傅发到群里的比赛,借来队里师傅账号和队里其他师傅一起做了一下,ak了web,师傅们tql.学到挺多东西,总结一下. rce_nopar 进入题目给出源码: <?php if(isset ...
- 太刺激了,面试官让我手写跳表,而我用两种实现方式吊打了TA!
前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识. 你好,我是彤哥. 上一节,我们一起学习了关于跳表的理论知识,相信通过上一节的学习,你一定可以给面试官完完 ...
- 17_Python的常用模块
1.随机数模块 random 1.随机小数 import random # (0,1)随机取浮点数 random.random() # 0.17988578778011 # (1, 3)取指定范围的浮 ...
- python3之print()函数
print语法格式 print()函数具有丰富的功能,详细语法格式如下: print(value, -, sep=' ', end='\n', file=sys.stdout, flush=False ...
- Bypass windous/mac 登陆密码
前言 如题,在52破解里看到一个非常好用的工具 Kon-Boot 2.7 功能 不会去擦除windows密码 不会修改windows文件 此外,Kon-Boot的最新版是目前世界上唯一的一个能够绕过W ...
- Kubernetes-12:Secret介绍及演示
Secret介绍 Secret存在的意义 Secret解决了密码.token.密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中,可以以Volume或者环境变量的方式使用 ...
- Linux:安装禅道
一.准备工作 禅道安装包ZenTaoPMS.8.1.3.zbox_64.gz,上传至服务器:rz命令 解压到指定目录 tar -zxvf ZenTaoPMS.8.1.3.zbox_64.gz -C ...
- 老生常谈SpringAop日志收集与处理做的工具包
AopLog是基于Spring Aop 和ThreadLocal实现的一个专门对请求方法内容日志的拦截与处理的日志工具包. 场景 : 我想知道一些重要的请求方法的请求参数,响应参数,请求头,以及耗时, ...