【C++第九课】---惊艳的继承

一、继承的概念

1.面向对象中的继承指类之间的父子关系

2.子类拥有父类的所有成员变量和成员函数

3.子类就是一种特殊的父类

4.子类对象可以当作父类对象使用

5.子类可以拥有父类没有的方法和属性

继承小实例:

#include <iostream>
#include <stdio.h>
using namespace std;
class Parent
{
       private:
              int i;
       public:
              Parent()
              {
                     i= 100;
              }
};
class Child:Parent  /* Child 继承 Parent */
{
};

int main(int argc, char **argv)
{
       ChildC;
       return0;
}

6.C++中的访问级别与继承

继承时的访问级别设定会影响到成员的访问级别

class Child:Parent  /* Child 继承 Parent */
{
};
=======>
class Child:private Parent  /* Child 继承 Parent */
{
};

7.注意:

C++中class的继承默认为private继承

private继承的子类拥有父类的所有成员

private继承使得父类的所有成员在子类中变为private成员

8.C++中的访问级别与继承

public继承

父类成员在子类中保持原有访问级别

private继承

父类成员在子类中变为private成员

二、类成员的访问级别只有public和private是否足够?

1.类的protected成员

protected成员可以在子类中被访问,但不能在外界被访问

protected成员的访问权限介于public和private之间

举例:

#include <cstdlib>
#include <iostream>
#include <stdio.h>

using namespace std;
class Parent
{
       protected:
              int i;
       public:
              Parent()
              {
                     i= 100;
              }
       void print(void)
       {
           std::cout<<"i = "<<i<<std::endl;
       }
};
class Child:public Parent
{
       private:
              int j;
       public:
       void print(void)
       {
           std::cout<<"i = "<<i<<std::endl;
       }
};

int main(int argc, char **argv)
{
       ChildC;
       C.print();
       getchar();
       return0;
}

那么,我们该如何选择使用继承方式呢?

1.类成员访问级别设置的原则

2.需要被外界访问的成员直接设置为public

3.只能在当前类中访问的成员设置为private

4.只能在当前类和子类中访问的成员设置为protected

private成员在子类中依然存在,但是却无法访问到。

继承与访问级别公式:

三、继承与访问的一个深度实例

#include <iostream>
using namespace std;

class A
{
       private:
              int a;
       protected:
              int b;
       public:
              int c;
              A()
              {
                     a= 1;
                     b= 2;
                     c= 3;
              }
              void setValue(int a, int b, int c)
              {
                     this->a= a;
                     this->b= b;
                     this->c= c;
              }
};
class B:private A
{
       public:
              void print()
              {
                     //cout<<"a= "<<a<<endl;     /* a isprivate */
                     cout<<"b= "<<b<<endl;
                     cout<<"c= "<<c<<endl;
              }
};
class C:protected A
{
       public:
              void print()
              {
                     //cout<<"a= "<<a<<endl;        /* a is private */
                     cout<<"b= "<<b<<endl;
                     cout<<"c= "<<c<<endl;
              }
};
class D:public A
{
       public:
              void print()
              {
                     //cout<<"a= "<<a<<endl;           /* a is private */
                     cout<<"b= "<<b<<endl;
                     cout<<"c= "<<c<<endl;
              }
};

int main(int argc, char** argv)
{
       Aaa;
    Bbb;
    Ccc;
    Ddd;

   aa.c = 100;
   //bb.c = 100; /* 私有继承,所有成员都成为私有*/
    //cc.c = 100; /* 保护继承,不能类外引用*/
   dd.c = 100;    

}

在上面代码中,关键需要注意的地方都已经注释了,对照着上面的那张表应该很容易理解。

六、小结:

1.继承是一种类之间的关系,子类是一种特殊的父类

2.子类通过继承可以得到父类的所有成员

3.private成员可以被子类继承但不能被子类访问

4.protected成员只能在当前类和子类中被访问

5.不同的继承方式可能改变继承成员的访问属性

时间: 2024-10-06 06:22:58

【C++第九课】---惊艳的继承的相关文章

C++--第15课 - 惊艳的继承

第15课 - 惊艳的继承 1. 继承的概念 面向对象中的继承指类之间的父子关系,子类拥有父类的所有成员变量和成员函数.子类就是一种特殊的父类,子类对象可以当作父类对象使用,子类可以拥有父类没有的方法和属性. 如下面的程序: #include <cstdlib> #include <iostream> using namespace std; class Parent { private: int a; public: Parent() { a = 1000; } void prin

从未如此惊艳!你好,SuperTextView

欢迎使用 SuperTextView,这篇文档将会向你展示如何使用这个控件来提高你构建项目的效率. SuperTextView 继承自 TextView,它能够大量的减少布局的复杂程度,并且使得一些常见的效果变得十分容易实现且高效.同时,它内置了动画驱动,你只需要合理编写Adjuster,然后startAnim()就可以看到预期的动画效果.它仅仅是一个控件,所以你可以不费吹灰之力的在你的项目中集成使用. 2 特点 你从此不必再为背景图编写和管理大量<shape>文件了. 重新优化的状态图功能使

【Java】反射调用与面向对象结合使用产生的惊艳

缘起 我在看Spring的源码时,发现了一个隐藏的问题,就是父类方法(Method)在子类实例上的反射(Reflect)调用. 初次看到,感觉有些奇特,因为父类方法可能是抽象的或私有的,但我没有去怀疑什么,这可是Spring的源码,肯定不会有错. 不过我去做了测试,发现确实是正确的,那一瞬间竟然给我了一丝的惊艳. 这其实是面向对象(继承与重写,即多态)和反射结合的产物.下面先来看测试,最后再进行总结. 友情提示:测试内容较多,不过还是值得一看. 具体方法的继承与重写 先准备一个父类,有三个方法,

基于案例SQL优化第九课作业分享

默认统计信息收集: 1. 11g默认启动了统计信息收集的任务,默认运行时间是周一到周五晚上10点和周6,周天的早上6点 2. 你也可以关闭自动统计新收集任务,选择手工收集的方式,但是一般不建议这样操作. 动态统计信息: 1. 统计信息默认情况下是每天晚上10点半后收集,如果新建对象还没来得级收集统计信息,就采用动态采样的方式. 2. 具体在set autotrace 跟踪的执行计划中,可以看到类似:- dynamic sampling used for this statement (level

【C++探索之旅】第一部分第九课:数组威武,动静合一

内容简介 1.第一部分第九课:数组威武,动静合一 2.第一部分第十课预告:文件读写,海阔凭鱼跃 数组威武,动静合一 上一课<[C++探索之旅]第一部分第八课:传值引用,文件源头>中,我们学习了函数参数的不同传递形式:值传递和引用传递,也学习了如何用头文件和源文件来更好地组织项目. 在不少程序中,我们都需要使用多个相同类型的变量.例如:一个网站的用户名列表(一般是string类型):或者一场比赛的前10个最佳得分(一般是int类型). 类似地,C++和大多数编程语言一样,也有将多个相同类型的数据

NeHe OpenGL教程 第九课:移动图像

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第九课:移动图像 3D空间中移动图像: 你想知道如何在3D空间中移动物体,你想知道如何在屏幕上绘制一个图像,而让图像的背景色变为透明,你希望有一个简单的动画.这一课将教会你所有的一切.前面的课程涵盖了基础的OpenGL,每一课都是在

《古墓丽影10》PC版重磅更新:DX12画质惊艳!

<古墓丽影10>PC版重磅更新:DX12画质惊艳! <古墓丽影>系列的最新作品<古墓丽影:崛起>已经上市一周有余,相信不少玩家都已经通关.但现在,官方给了PC版玩家一个再度通关的绝佳理由--画质大幅提升. 今天,<古墓丽影:崛起>开发商面向PC版推送了重磅更新,主要加入对于DX12和VXAO技术支持,从而使游戏光影.细节纹理表现获得全面增强,而且画面流畅性也有所改善. 官方公布的数据显示,测试机型配置为I7-2600,GTX970显卡.在DX11的环境下,游

【Linux探索之旅】第二部分第九课:查找文件,无所遁形

内容简介 1.第二部分第九课:查找文件,无所遁形 2.第二部分测试题 查找文件,无所遁形 这一课不难,但挺重要的. 之前的课程我们见识过了Linux下文件的组织形式是很特别的,跟Windows不一样. 我们也用ls / 这个命令来列出根目录下的所有目录,有/bin,/etc,/var,/home,等等.而这些目录下又有子目录和文件,错综复杂. 这些目录中有一部分是历史遗留的,从Unix时代就有了.问题是:我们如何在这"茫茫文海"中查找我们需要的文件. "人潮人海中,有你有我.

人生,懂得相知,相惜包容之心不易。若灵犀一处,注定单一的风景,那就让生命于孤独中,开成一朵惊艳的花来,所有的资本,独倾城于自己!百度几下,你就知道,还得问百度

人生,懂得相知,相惜包容之心不易.若灵犀一处,注定单一的风景,那就让生命于孤独中,开成一朵惊艳的花来,所有的资本,独倾城于自己! ————题记 又是下雨的天气,青石板的湿气寒生,缝隙边的小草,漫步一春,一夏,一秋,于这冬天,仿佛还在执意某个角落,安定一个归属,定要等到霜雪满天,才肯凋谢! 若可,我愿是丁香般的女子,无须为了谁而忧怨,更无需丈量光阴给予的深浅,只管停泊江南的一席之地,为自己开一扇幽窗,与书共知己.风来且沐浴,月倚枕边书:雨临相对盏,醉赋宋唐风:再植一盆盆的兰草,便可举杯邀月兰生慧,