继承的概念

继承是c++中一个重要的概念。继承是指,我们可以使用一个类来定义另一个类,在创建这个类时,我们就不需要重新编写数据成员与成员函数,这可以大大方便我们编写代码和维护代码的效率。

当我们使用一个类来定义另一个类时,前者就称为基类,后者就称为派生类

类派生的方式

为了派生一个类,我们可以指定一个类继承列表,列表可以有一个类,或者多个类,类继承的形式如下:

class Rectangle: public Shape	//其中Rerangle 是派生类,shape是继承类

其中 : public位置的修饰符可以为:public,protected,private,他们的意思分别是

  • public :当从一个公有基类派生一个类的时候,基类的公有成员成为派生类的公有成员;基类的保护成员成为派生类的保护成员。一个基类的私有成员不能被派生类直接访问,但可以通过调用基类的公有和保护成员访问基类的私有成员。
  • protected :当从一个受保护的基类派生子类的时候,基类的公有和保护成员成为派生类的保护成员。
  • private :当从一个私有的基类派生子类的时候,基类的公有和保护成员成为派生类的私有成员。

这个位置也可以空缺,它的默认情况是private

比如:

#include <iostream>
using namespace std; class Shape
{
public:
Shape(){width = 0,height = 1;};
void init(double w,double h){
width = w;
height = h;
}
double get_w(){return width;}
double get_h(){return height;}
friend class Retangle;
private:
double width;
double height;
}; class Rectangle: public Shape
{
public:
Rectangle(double xx,double yy,double w,double h){
init(w,h);
x = xx;
y = yy;
}
void move(int px,int py){x-=px,y-=py;}
double get_x(){return x;}
double get_y(){return y;}
private:
double x,y;
}; int main(void)
{
Rectangle rect(1,2,3,4);
cout<<rect.get_x()<<" "<<rect.get_y()<<" "<<rect.get_w()<<" "<<rect.get_h()<<endl;
int xx,yy;
cin>>xx>>yy;
rect.move(xx,yy);
cout<<rect.get_x()<<" "<<rect.get_y()<<" "<<rect.get_w()<<" "<<rect.get_h()<<endl; return 0;
}

程序运行结果

1 2 3 4
1 2 //input
0 0 3 4

这里的Shape就是基类,Retangle就是派生类。

需要注意的是:无论哪种继承,静态成员,静态成员函数与友元函数都无法被继承

类的多继承

上述继承为类的单继承的应用,多继承可以派生一个到多个基类。

比如:

#include<iostream>

using namespace std;

class A {
public:
A(int x) : x(x){}
int get_x() {return x;}
private:
int x;
}; class B {
public:
B(int y) : y(y){}
int get_y() {return y;}
private:
int y;
}; class C : public A, public B {
public:
C(int x,int y) : A(x), B(y) {}
void print() {
cout<<get_x()<<endl;
cout<<get_y()<<endl;
}
}; int main() {
C c(1,2);
c.print();
return 0;
}

输出为

1
2

c++继承知识点小结的更多相关文章

  1. C++重要知识点小结---2

    C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html 1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继 ...

  2. C++重要知识点小结---3

    C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...

  3. super超类继承特点小结

    super超类继承特点小结: 1. super并不是一个函数,是一个类名,形如super(B, self)事实上调用了super类的初始化函数,产生了一个super对象: 2. super类的初始化函 ...

  4. React及Nextjs相关知识点小结

    React及Nextjs知识点小结 函数式组件和类组件区别是什么 1.函数式组件是用于创建无状态的组件,组件不会被实例化,无法访问this中的对象,无法访问生命周期方法,是无副作用的,相比于类组件函数 ...

  5. 【SpringBoot MQ 系列】RabbitMq 核心知识点小结

    [MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...

  6. SpringBoot 系列教程之事务隔离级别知识点小结

    SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...

  7. disruptor笔记之四:事件消费知识点小结

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. C++ 继承与接口 知识点 小结(一)

    [摘要] 要求理解覆盖.重载.隐藏的概念与相互之间的差别.熟记类继承中对象.函数的訪问控制:掌握虚函数.虚函数表.虚函数指针的联系:理解区分虚函数和虚继承在虚方法.虚指针在空间分配上的重点与难点:熟练 ...

  9. promise知识点小结

    断断续续学习es6也有一段时间了,趁着开学空闲对知识点做一些小结. 为什么使用promise 谈到Promise,我们知道,这是社区较理想的异步编程解决方案.想要掌握promise,我们首先要知道其提 ...

随机推荐

  1. js和jQuery以及ajax的小练习

    今天学习了通过鼠标的点击事件然后让边框变颜色,还有怎么设置一个点击浏览器的输入框然后显示一个边框,还学习了通过ajak来获取post和get的值,通过它如何调用这个函数. 第一部分: 通过鼠标的点击让 ...

  2. LOJ#6437. 「PKUSC2018」PKUSC

    题面 题意转化为: 判断每个点所在的圆有多长的弧度角位于多边形内部. 然后就很暴力了. 每个点P,直接找到多边形和这个圆的所有交点,按照距离P的角度排序. 找交点,直接联立二元二次方程组.... 需要 ...

  3. 怎样使用github?(转)

    怎样使用github?(转) 转自: 怎样使用 GitHub? - 知乎https://www.zhihu.com/question/20070065 珊姗是个小太阳 ❤努力做最胖//bang的健身博 ...

  4. Windbg 查看SSDT表

    SSDT HOOK 的原理其实非常简单,我们先实际看看KeServiceDescriptorTable是什么样的.         lkd> dd KeServiceDescriptorTabl ...

  5. Python机器学习的步骤

    原文出处: kdnuggets   译文出处:数据工匠 开始.这是最容易令人丧失斗志的两个字.迈出第一步通常最艰难.当可以选择的方向太多时,就更让人两腿发软了. 从哪里开始? 本文旨在通过七个步骤,使 ...

  6. 14.data.js

    dict_data = { "_id":1, name:"王五", age:55, gender:true } db.stu.insert(dict_data) ...

  7. Python flask 构建微电影视频网站✍✍✍

    Python flask 构建微电影视频网站  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  8. NEO4J 图数据库使用APOC数据导入

       Neo4j 数据导入 一.安装与部署 直接在官网下载安装包安装,解压即可. 二.下载相应的jar包 apoc 包下载链接: https://github.com/neo4j-contrib/ne ...

  9. Kill- Linux必学的60个命令

    1.作用 kill命令用来中止一个进程. 2.格式 kill [ -s signal | -p ] [ -a ] pid ... kill -l [ signal ] 3.参数 -s:指定发送的信号. ...

  10. vue+h-ui+layUI完成列表页及编辑页

    最近做一个新项目,用H-ui做后台, 比较喜欢他的模仿bootsharp的栅格和表单样式. 感觉不好的是iframe加载速度比较慢. 这里在原有的H-ui页面基础上加入用vue来绑数据,用的还可以. ...