C++四:继承与派生
C++四:继承与派生
一、概念
继承就是从先辈处得到属性和行为特性。类的继承,是指新的类从已有类的那里得到的特性。类的派生,就是指已有类产生新类的过程。
二、应用
定义为
class 派生类名:继承方式 基类名, .. 继承方式 基类名n
{
派生类成员声明;
};
继承的好处在于解决了代码的重用性和可扩充性。
一、公用继承
基类的公有成员和保护成员的访问在派生类,而基类的私有成员不可直接访问。
#include <iostream>
using namespace std;
class A {
public:
int i = 20;
virtual void aaa() {
cout << "A:aaa()" << endl;
}
};
class B :public A {
public:
int i = 21;
void aaa() {
cout << "B:aaa()" << endl;
}
};
int main() {
A * pb = new B();
pb->aaa();
cout << pb->i << endl;
B * b = new B();
cout << b->A::i << endl;
cout << b->i << endl;
b->A::aaa();
return 0;
}
运行结果为:
B:aaa()
20
20
21
A:aaa()
二:私有继承
则是:class 类名:private 基类名
此时,基类中的公有成员与保护成员都在派生类中以私有成员的身份出现。
例如将代码中的“class B :public A”改为“class B :private A”
系统将会报错:
C2248 “A::i”: 无法访问 private 成员(在“A”类中声明)
C2248 “A::aaa”: 无法访问 private 成员(在“A”类中声明)
三、保护继承
基类的公有成员与私有成员都以保护成员的身份出现在派生类中,而基类的私有成员不可访问。
#include<iostream>
#include<assert.h>
using namespace std;
class A {
public:
int a;
A() {
a2 = 2;
a = 4;
}
void fun() {
cout << a << endl;
cout << a2 << endl;
}
protected:
int a2;
};
class B : protected A {
public:
int a;
B(int i) {
A();
a = i;
}
void fun() {
cout << a << endl;
cout << a2 << endl;
}
};
int main() {
B b(10);
cout << b.a << endl;
return 0;
}
C++四:继承与派生的更多相关文章
- 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法
四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...
- python 全栈开发,Day20(object类,继承与派生,super方法,钻石继承)
先来讲一个例子 老师有生日,怎么组合呢? class Birthday: # 生日 def __init__(self,year,month,day): self.year = year self.m ...
- C++ 继承与派生
继承的意义? 使程序的设计更符合发展规律,即事物的发展是一个从低级到高级的发展过程,类的继承也是反映由原始的简单代码到丰富的高级代码的过程.它能帮助我们描述事物的层次关系,有效而精确的理解事物,理解事 ...
- C++ 继承和派生介绍
继承(inheritance)是软件重用的一种方式,程序员通过继承可以吸收已有类的数据和行为来创建新类,并可以添加新的数据和行为来增强类的功能.创建新类时,并不需要创建全新的数据和成员函数,我们可以指 ...
- python的类继承与派生
一.继承和派生简介: 其实是一个一个事物站在不同角度去看,说白了就是基于一个或几个类定义一个新的类.比如定义了动物类接着派生出了人类,你也可以说人类继承了动物类.一个意思.此外python类似于C和C ...
- Python(面向对象编程——2 继承、派生、组合、抽象类)
继承与派生 ''' 继承:属于 组合:包含 一. 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称 ...
- Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)
一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...
- Day08:继承与派生,多态,封装,绑定与非绑定方法,面向对象高级(反射,__str__,__del__)
上节课复习:1.编程思想 面向过程 核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么后干什么 基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维 ...
- [C++]变量存储类别,指针和引用,类与对象,继承与派生的一些摘要
C++中共有四种存储类别标识符:auto/static/register/extern 1.auto 函数或分程序内定义的变量(包括形参)可以定义为auto(自动变量).如果不指定存储类别,则隐式定义 ...
随机推荐
- 使用Python的requests库作接口测试——对HTTP动词的支持
Requests提供了几乎所有HTTP动词的功能:GET,OPTIONS, HEAD,POST,PUT,PATCH和DELETE. 动词GET-查看提交信息 HTTP GET是一个幂等的方法,从给定的 ...
- C#中使用设置(Settings.settings) Properties.Settings.Default
应用程序及用户设置 在设计时创建新设置的步骤 在“Solution Explorer”(解决方案资源管理器)中,展开项目的“Properties”(属性)节点. 在“Solution Explorer ...
- java swing多线程
比如一个爬虫 在界面上显示当前时间,每秒都刷新一次用来判断软件是不是卡死 在爬取程序运行的时候,界面可能会卡死 那这就要把爬取程序放在另一个线程里边 同时,也可以把rtc放在另一个线程里边 具体代码, ...
- Cf序列化器-Serializer解析
Cf序列化器-Serializer 定义序列化器 Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Seri ...
- IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图)
IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图) .embody{ padding:10px 10px 10px; margin:0 -20px; border-b ...
- git仓库远程连接GitHub
1 先下载git for windows 然后一直点下一步安装. 2 安装之后,选择git gui.生成ssh 链接 git 公钥. 用命令也可以: $ ssh-keygen -t rsa -C &q ...
- 2019.9.24 csp-s模拟测试51(a) 反思总结
T1:还在头铁,顺便复习了一下lct[虽然这题用不上因为复杂度不对] 头铁结束. 虽然题目存在换根的操作,实际上并不用真的换根. 2操作中求lca的时候只要考虑原树上root和x.y的lca以及x,y ...
- 【模板】倍增LCA [2017年5月计划 清北学堂51精英班 Day3]
P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询 ...
- Redis 复制、Sentinel的搭建和原理说明(转)
Redis 复制.Sentinel的搭建和原理说明 转自:http://www.cnblogs.com/zhoujinyi/p/5570024.html. 背景: Redis-Sentinel是Re ...
- Qt5.9.1_MSVC2017版本调试环境安装
参照如下链接https://blog.csdn.net/nupt_zhangtao/article/details/77444132