派生类继承了基类的所有成员,但不包含 构造函数、析构函数、默认赋值运算符。

 1、继承方式、访问控制

(1)protected属性:类的对象不能访问该属性成员,但派生类的成员函数可以访问基类的protected属性成员。

(2)无论哪种继承方式,派生类成员函数都可访问:public、protected ,但不能是基类的 private;

(3)什么属性的继承,在派生类中就是什么属性。

C++中的继承方式会影响子类的对外访问属性,判断原则如下

(a)看调用语句,写在子类的内部还是外部;

(b)看子类如何从父类继承;

(c)看父类中的访问级别;

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include<cstring>
using namespace std; class Document
{
public:
Document();
Document(char* name);
~Document()
{
}
void PrintName();
private:
char *Name;
};
Document::Document(char *name)
{
Name = new char[strlen(name) + ];
strcpy(Name, name);
}
void Document::PrintName()
{
cout << Name << endl;
} class Book : public Document
{
public:
Book(char name[], int pagecout);
void PrintName();
private:
int PageCount;
};
Book::Book(char *name, int pagecount) :Document(name)
{
PageCount = pagecount;
}
void Book::PrintName()
{
cout << "name of book: ";
Document::PrintName();
} int main()
{
Document a("Document1");
a.PrintName();
Book b("Book1", );
b.PrintName();
system("pause");
return ;
}

2、派生类的构造和析构

(1)基类的构造和析构函数不能被派生类所继承,派生类需要定义自己的。基类具有无参构造函数,派生类未定义自己的,则系统自动调用基类的无参构造来初始化派生类。若基类没有无参的,派生类也不自己定义,则编译会出错。

(2)派生类的析构函数:不能继承基类的,只可以自己定义,且只负责清理它新定义的成员,清理位于堆区的成员。

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include<string>
using namespace std; class Cpolygon
{
private:
double side1, side2;
public:
Cpolygon(double, double);
double value_1()
{
return side1;
}
double value_2()
{
return side2;
}
void get_values()
{
cout << "side1= " << side1 << "side2= " << side2 << endl;
}
};
Cpolygon::Cpolygon(double a, double b)
{
side1 = a; side2 = b;
} class Crectangle :public Cpolygon
{
public:
Crectangle(double, double);
double area()
{
return (value_1()*value_2());
}
void get_values()
{
cout << "长方形的边长: ";
Cpolygon::get_values();
cout << "面积:" << area() << endl;
}
};
// 派生类的构造函数
Crectangle::Crectangle(double a, double b):Cpolygon(a,b){} int main()
{
Crectangle rec(, );
rec.get_values();
system("pause");
return ;
}

3、虚继承

派生类中的 static 关键字:类内定义,类外初始化,在初始化的时候分配内存。

1、多继承与二义性

多继承:派生类有多个直接基类或间接基类;

二义性:派生类的多继承引起二义性,基类构造函数调用了两次,也析构了两次;

 2、虚继承

解决方法:将共有基类设置为虚基类

// 虚基类
class Fderiver1 :virtual public base
{ };

C++(三十八) — 继承方式、访问控制、构造和析构、虚继承的更多相关文章

  1. SQL注入之Sqli-labs系列第三十八关、第三十九关,第四十关(堆叠注入)

    0x1 堆叠注入讲解 (1)前言 国内有的称为堆查询注入,也有称之为堆叠注入.个人认为称之为堆叠注入更为准确.堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新 的查询或者终止查询,可以达到修改数据 ...

  2. NeHe OpenGL教程 第三十八课:资源文件

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)

    1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...

  4. Java进阶(三十八)快速排序

    Java进阶(三十八)快速排序 前言 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 ...

  5. 微信小程序把玩(三十八)获取设备信息 API

    原文:微信小程序把玩(三十八)获取设备信息 API 获取设备信息这里分为四种, 主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo, 重力感应数据wx. ...

  6. C++ 类的继承三(继承中的构造与析构)

    //继承中的构造与析构 #include<iostream> using namespace std; /* 继承中的构造析构调用原则 1.子类对象在创建时会首先调用父类的构造函数 2.父 ...

  7. bp(net core)+easyui+efcore实现仓储管理系统——入库管理之二(三十八)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  8. C++ 继承方式 //语法:class 子类 :继承方式 父类 //继承方式 三种: //1.公共继承 //2.保护继承 //3.私有继承

    1 //继承方式 2 //语法:class 子类 :继承方式 父类 3 //继承方式 三种: 4 //1.公共继承 5 //2.保护继承 6 //3.私有继承 7 8 #include <ios ...

  9. Deep learning:三十八(Stacked CNN简单介绍)

    http://www.cnblogs.com/tornadomeet/archive/2013/05/05/3061457.html 前言: 本节主要是来简单介绍下stacked CNN(深度卷积网络 ...

随机推荐

  1. springboot入门简单,深入难

    18年1月份的时候在腾讯课堂学习springboot.springcloud搭建微服务,老师告诉我们,springboot入门容易,深入难. 因为你必须东西SpringMVC.Spring.Mybat ...

  2. [LeetCode] 138. Copy List with Random Pointer 拷贝带随机指针的链表

    A linked list is given such that each node contains an additional random pointer which could point t ...

  3. Kubernetes 存储卷管理 PV&PVC(十)

    目录 一.emptyDir 二.hostPath 三.PV & PVC 1.NFS PersistentVolume 2.创建 PVC 3.创建 Pod 进行挂载 为了持久化保存容器的数据,可 ...

  4. VisualStudio开发UE4工程设置

    转自:http://wangjie.rocks/2016/06/24/ue4-vs-setup/ 推荐插件 Visual Assist X C++ 代码高亮 UnrealVS Extension UE ...

  5. laravel composer vendor 目录加载类库详细 之后做说明

    composer installLoading composer repositories with package informationInstalling dependencies (inclu ...

  6. 腾讯明眸极速高清升级2.0,助力韩国赛事超高清5G直播

    近期,由腾讯云联合韩国CUDO通信研究所及intel推出的tile方式的viewport流服务编码,已正式通过测试.届时韩国最新5G网络将基于腾讯明眸-极速高清2.0和腾讯云直播产品能力,在韩国国内率 ...

  7. Cookie 允许第三方cookie

    这样本地调线上的接口,就可以使用线上接口生成的cookie了. 或者允许,或者增加白名单.

  8. Linux定时自动备份oracle数据库

    1.在服务器创建备份目录,并赋予权限mkdir -p /backup/P_DATA #新建shell脚本存放路径mkdir -p /backup/P_DB_BACK  #新建Oracle数据库备份目录 ...

  9. Java开发笔记(一百一十一)POST方式的HTTP调用

    前面介绍了GET方式的HTTP调用,该方式主要用于向服务器索取数据,不管是字符串形式的应答报文,还是二进制形式的网络文件,都属于服务器提供的信息.当然调用方也可以向服务地址传送请求参数,除了通过连接对 ...

  10. vue3 template refs dom的引用、组件的引用、获取子组件的值

    介绍 通过 ref() 还可以引用页面上的元素或组件. DOM 的引用 <template> <div> <h3 ref="h3Ref">Tem ...