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++四:继承与派生的更多相关文章

  1. 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法

    四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...

  2. python 全栈开发,Day20(object类,继承与派生,super方法,钻石继承)

    先来讲一个例子 老师有生日,怎么组合呢? class Birthday: # 生日 def __init__(self,year,month,day): self.year = year self.m ...

  3. C++ 继承与派生

    继承的意义? 使程序的设计更符合发展规律,即事物的发展是一个从低级到高级的发展过程,类的继承也是反映由原始的简单代码到丰富的高级代码的过程.它能帮助我们描述事物的层次关系,有效而精确的理解事物,理解事 ...

  4. C++ 继承和派生介绍

    继承(inheritance)是软件重用的一种方式,程序员通过继承可以吸收已有类的数据和行为来创建新类,并可以添加新的数据和行为来增强类的功能.创建新类时,并不需要创建全新的数据和成员函数,我们可以指 ...

  5. python的类继承与派生

    一.继承和派生简介: 其实是一个一个事物站在不同角度去看,说白了就是基于一个或几个类定义一个新的类.比如定义了动物类接着派生出了人类,你也可以说人类继承了动物类.一个意思.此外python类似于C和C ...

  6. Python(面向对象编程——2 继承、派生、组合、抽象类)

    继承与派生 ''' 继承:属于 组合:包含 一. 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称 ...

  7. Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)

    一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...

  8. Day08:继承与派生,多态,封装,绑定与非绑定方法,面向对象高级(反射,__str__,__del__)

    上节课复习:1.编程思想    面向过程        核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么后干什么        基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维 ...

  9. [C++]变量存储类别,指针和引用,类与对象,继承与派生的一些摘要

    C++中共有四种存储类别标识符:auto/static/register/extern 1.auto 函数或分程序内定义的变量(包括形参)可以定义为auto(自动变量).如果不指定存储类别,则隐式定义 ...

随机推荐

  1. poj1961

    poj1961主要是考察对next数组的理解,abaabaabaaba abaabaabaabaabaaba错开的部分便是循环节 7月29日更 如果n%(n-kmp[k])==0,那么n-kmp[k] ...

  2. Windows Apache httpd-vhosts.conf

    <VirtualHost *:> DocumentRoot "D:\wamp\www" ServerName localhost </VirtualHost> ...

  3. For循环和闭包问题

    考虑一下以下的代码片段: for (var i = 0; i < 5; i++) { var btn = document.createElement('button'); btn.append ...

  4. web服务器--nginx简介

    nginx 介绍Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是一款轻量级的Web 服务器/反向代理服务器及电 ...

  5. 使用JSP渲染Web视图

    Pom文件引入以下依赖 注意,创建SpringBoot整合JSP,一定要为war类型,否则会找不到页面 不要把jsp页面存放在Resources目录下,resources目录是给springboot打 ...

  6. 考试总结 模拟28(W)

    心得: 状态极差,都怪放假,上一套的T3没改完,今天考试没有一点状态,开学恐惧症.(不恐惧作业或一调但还是很茫然) T1能A掉实在是意外,杂题T1没做过,可能是人品守恒,(丢了钱今天才发现以后一定锁柜 ...

  7. IUAP--单点登录

    登录组件: 提供统一的登录组件 身份.证明验证身份 支持多种身份标识,用户名.邮箱.手机号 支持多个域,从与得到用户响应的角色,权限进行验证用户时候能进行操作. 支持会话管理和安全管理 支持多种验证策 ...

  8. 2018-8-10-C#-不能用于文件名的字符

    title author date CreateTime categories C# 不能用于文件名的字符 lindexi 2018-08-10 19:16:52 +0800 2018-02-22 1 ...

  9. 如何在Liferay 7中用html显示页面

    liferay portlet默认的显示页面是view.jsp,虽然可以在jsp中用include标签包括html文件,但是如何直接通过修改配置文件让默认的显示页面为view.html呢? 1.用Li ...

  10. JS黑科技

    1.论如何优雅的取随机字符串 Math.random().toString(16).substring(2) // 13位 Math.random().toString(36).substring(2 ...