基类通常定义一个虚析构函数,通过基类指针析构派生类对象时不会出现未定义的行为。
如果一个类定义析构函数,编译器不会为这个类合成移动操作。
虚函数覆盖,可以显式地加override,可以让程序员的意图更加清晰,同时让编译器可以为我们返现一些错误。

派生类,先初始化基类的部分,然后再按照声明的顺序依次初始化派生类的成员。
不希望一个类被继承,将它定义为final

和内置指针一样,智能指针也支持派生类到基类的类型转换。该转换只对指针和引用有效。
同时受可访问性的限制,如D继承自B,如不是公有继承,用户代码不能使用该转换。D的成员和友元则永远可以执行转换。如是公有或保护继承,D的派生类的成员和友元也可以执行转换。

虚函数的形参和返回类型必须和基类一致。一个例外是,当虚函数返回类型是类本身的指针或引用时。

使用作用于运算符可以回避虚函数机制,主要用于派生类中调用它覆盖的基类的虚函数版本时。

派生类的成员或友元只能通过派生类对象来访问基类的受保护成员。而不能直接通过基类对象访问。

派生访问说明符对派生类的成员(友元)能否访问其直接基类的成员没有什么影响。主要目的是控制派生类用户(包括派生类的派生类)对于基类成员的访问权限。

通过using声明语句改变成员的可访问性,使得派生类的用户可以使用基类的私有成员。
class Derived:private Base
{
public:
using Base::size;
}

派生类的作用域在基类之内,解析的时候从内往外查找。一旦找到进行常规的类型检查,确认是否合法。如果合法,根据是否是虚函数将产生不同的代码。

派生类删除的拷贝控制与基类的关系
基类某函数是删除或不可访问,派生类对应成员也删除。
基类析构函数删除,则派生类合成的默认和拷贝构造是删除的。
基类移动是删除的,派生类移动也删除;基类析构删除,派生移动构造也删除。

派生类构造和赋值需要同时处理基类的成员,析构则只负责自己的资源。
D &D::operator=(const D &rhs)
{
Base::operator=(rhs);
//派生类的成员赋值
return *this;
}

派生类继承基类的构造函数
其实就是using声明语句显式地让编译器生成与构造基类形参列表完全相同的派生类构造函数。
using B:: B;
生成形式如下
D(parms):base(args){}
不能指定explicit或constexpr,基类是什么属性派生类也一样。默认参数不继承,生成多个构造函数。
派生类可以继承部分构造函数,自己定义部分。自己定义的部分将会替换继承来的相同类型的部分。
默认、拷贝和移动构造函数不会被继承。

C/C++基础--面向对象编程OOP的更多相关文章

  1. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  2. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)

    一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...

  3. JS--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)

    一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...

  4. 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础

    第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...

  5. [JAVA] 面向对象编程OOP Note

    面向对象编程OOP Note OOP五个基本特性1. 万物皆对象.2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的.3. 每个对象都有自己的由其他对象所构成的存储.4. 每个对象都拥有其类型 ...

  6. 学习面向对象编程OOP 第一天

    面向对象编程 Object Oriented Programming 一.什么是面向对象编程OOP 1.计算机编程架构; 2.计算机程序是由一个能够起到子程序作用的单元或者对象组合而成.也就是说由多个 ...

  7. JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)

    一.面向对象编程(继承) 这篇博客是面向对象编程的第三篇,JS继承.继承顾名思义,就是获取父辈的各种"财产"(属性和方法). 怎么实现继承? 我们的JavaScript比较特别了, ...

  8. 面向过程编程(OPP) 和面向对象编程(OOP)的关系

    面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和 ...

  9. S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则

    注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html      < ...

随机推荐

  1. c# 休眠后 定时唤醒

    源码见附件,执行唤醒功能前需要先对电源进行设置如下图: 源码

  2. Estimating Linguistic Complexity for Science Texts--paper

    http://aclweb.org/anthology/W18-0505 https://sites.google.com/site/nadeemf0755/research/linguistic-c ...

  3. java-内部类访问特点-私有成员内部类-静态成员内部类-局部内部类访问局部变量

    1.内部类访问特点: - 内部类可以直接访问外部类的成员,包括私有. - 外部类要访问内部类的成员,必须创建对象. - 外部类名.内部类名 对象名 = 外部类对象.内部类对象: - 例: class ...

  4. difference among String,StringBuilder,StringBuffer

    difference among String,StringBuilder,StringBuffer String常用构造函数 String(byte[] bytes) String(byte[] b ...

  5. opencv3中SurfFeatureDetector、SurfDescriptorExtractor、BruteForceMatcher的使用

    opencv2中SurfFeatureDetector.SurfDescriptorExtractor.BruteForceMatcher在opencv3中发生了改变.具体如何完成特征点匹配呢?示例如 ...

  6. javascript 日常

    $('#code').bind('keypress', function (e) { //绑定回车处理 ) { console.log($("#code")); } }); $.a ...

  7. (9)SQL的注入(致命的漏洞)

    用户登陆网站的时候进行账户验证输入特殊的格式和字符会触发一个漏洞,不需要密码直接登录成功 import pymysql username = input('请输入账号: ')password = in ...

  8. 深入浅出理解 COOKIE MAPPING

    转载自:http://www.myttnn.com/digital-marketing/cookie-mapping-introduction/ 在RTB(实时竞价广告,Real-Time-Biddi ...

  9. 实现在同一界面打开putty终端连接工具

    用过putty的人可能知道,每打开一次啊putty程序只能开启一个连接,这个在实际运用中很不方便,反正我开ssh一般都是同时开四个窗口 其实有一个程序可以实现打开多个putty,下面是下载地址 htt ...

  10. MySQL Cursor Demo

    -- 使用cursor的demo -- ==============================## -- 删除存储过程 DROP PROCEDURE USP_TestCursor; DELIMI ...