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 ...
随机推荐
- React-Native知识点相关
React-Native相关 一,为什么要使用React-native? Hybrird的首屏时间太慢,白屏太久,影响用户体验: 原生native开发成本较高: 这里补充一点Webview的性能优化: ...
- Spring Validation-用注解代替代码参数校验
Spring Validation 概念 在原先的编码中,我们如果要验证前端传递的参数,一般是在接受到传递过来的参数后,手动在代码中做 if-else 判断,这种编码方式会带来大量冗余代码,十分的不优 ...
- 使用DataStax Java驱动程序的最佳实践
引言 如果您想开始建立自己的基于Cassandra的Java程序,欢迎! 也许您已经参加过我们精彩的DataStax Academy课程或开发者大会,又或者仔细阅读过Cassandra Java驱动的 ...
- java 注解开发
目录 注解 JDK自带的注解三个 注解分类 按照运行机制 按照来源分类 自定义注解的语法要求 元注解 解析注解 获取注解的注解 Spring中的注解 组合注解 注解 JDK自带的注解三个 @Overr ...
- Vue企业级优雅实战03-准备工作04-全局设置
本文包括如下几个部分: 初始化环境变量文件 JS 配置文件初始化:如是否开启 Mock 数据.加载本地菜单.URL 请求路径等: 国际化文件初始化:初始化国际化文件的结构: 整合 Element UI ...
- 10_Python的函数function
1.函数的概述 1.函数是可以重复执行的语句块且可以重复调用,函数封装了可重复执行的语句提高了语句的可重复性 2.函数的参数和返回值的作用流程图: https://www.processon. ...
- 剑指 Offer 49. 丑数
题目描述 我们把只包含质因子 2.3 和 5 的数称作丑数(Ugly Number).求按从小到大的顺序的第 n 个丑数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, ...
- Activiti7 查询用户任务列表
package com.itheima.activiti; import org.activiti.engine.ProcessEngine; import org.activiti.engine.P ...
- python中绝对值的表达式
abs(x) print(abs(23)) #23print(abs(-45)) #45
- sql中的join
首先准备数据 有以下数据,三张表:role(角色表).hero(英雄表).skill(技能表),我们以英雄联盟的数据做示例 一个hero对应一个role(我们这里暂定) 一个role可以对应多个her ...