c++基础 之 面向对象特征一 : 继承

时间:2022-09-04 15:26:56

class Base
{

public:


void f()


{


cout<<"void f()"<<endl<<endl;


}


void f(int i)


{


cout<<"void f(int)"<<endl<<endl;


}


void h()


{


cout<<"void h()"<<endl<<endl;


}


void g(char s)


{


cout<<"void g(char)"<<endl<<endl;


}

protected:

private:

};

class Devie1 : public Base

{

public:


void h() // 重定义 覆盖父类的h()


{


cout<<"Devie1 void h()"<<endl<<endl;


}

protected:

private:

};

class Devie2 : public Base

{

public:


void f()// 重定义 覆盖了父类的所有重载函数 f() f(int a)


{


cout<<"Devie2 void f()"<<endl<<endl;


}


void g() // 隐藏 父类的 g(char s)


{


cout<<"Devie2 void g()"<<endl<<endl;


}

protected:

private:

};

int _tmain(int argc, _TCHAR* argv[])
{
Base b;
b.f();
b.f(2);
b.g('3');
b.h();

Devie1 d1;
d1.f(1);//继承
d1.f();//继承
d1.g('1');//继承
d1.h();//覆盖

Devie2 d2;
d2.f();//覆盖 
//找不到Base::f(int) 被隐藏  覆盖父类的 f() 
d2.g();//隐藏
//找不到父类的Base::g(char s) 被隐藏
d2.h();//继承
//可以看出,若子类没有重定义父类的操作,子类会调用父类的函数。
//如果子类重定义,分两种情况:
//1.子类重定义父类的函数,返回值和参数列表一致,此为 覆盖  override
//子类和基类一样可以发相同的消息,但是子类表现出不同于父类的行为。。。。
//2.子类重定义了父类的成员函数,但是修改了返回值或者参数列表,此为隐藏 name hiding 
//子类重定义父类的重载函数 时 将导致该函数的所有版本在子类中被自动隐藏。。。
//d1.f()先在子类找f() 找不到再到父类找,如果在子类找到了就使用了。。。

//替代原则:向上类型转换
//在任何需要基类对象(指针)的地方,都可以用子类的对象(指针)来代替

return 0;
}

//可以看出,若子类没有重定义父类的操作,子类会调用父类的函数。
//如果子类重定义,分两种情况:
//1.子类重定义父类的函数,返回值和参数列表一致,此为 覆盖  override
//子类和基类一样可以发相同的消息,但是子类表现出不同于父类的行为。。。。
//2.子类重定义了父类的成员函数,但是修改了返回值或者参数列表,此为隐藏 name hiding 
//子类重定义父类的重载函数 时 将导致该函数的所有版本在子类中被自动隐藏。。。
//d1.f()先在子类找f() 找不到再到父类找,如果在子类找到了就使用了。。。

//替代原则:向上类型转换
//在任何需要基类对象(指针)的地方,都可以用子类的对象(指针)来代替

c++基础 之 面向对象特征一 : 继承的更多相关文章

  1. &lbrack;&period;net 面向对象编程基础&rsqb; &lpar;12&rpar; 面向对象三大特性——继承

    [.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...

  2. Python基础之面向对象3(继承)

    一.继承相关概念 1.语法: 2.定义: 3.优缺点: 4.相关概念: 5.相关内置函数: 6.继承内存图: 7.多继承: 二.多态相关概念 1.定义及作用: 2.重写概念: 3.运算符重载: 定义: ...

  3. C&num;基础知识-面向对象思想之继承(八)

    上一篇的标题编程思想我觉得不是很符合主题,因为编程思想的范围太大了,不仅仅是封装 继承 多态,所以比较符合主题的应该是面向对象思想.这一篇中将继续叙述面向对象思想中的继承. 从字面来看继承表达的意思已 ...

  4. Python 基础之面向对象类的继承与多态

    一.继承 定义:一个类除了拥有自身的属性方法之外,还拥有另外一个类的属性和方法继承: 1.单继承 2.多继承子类: 一个类继承了另外一个类,那么这个类是子类(衍生类)父类:一个类继承了另外一个类,被继 ...

  5. 04&lowbar;Java面向对象特征之继承与多态

    1. 继承 Java继承的实现(只支持单继承,而不是多继承,但有接口的多实现) 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类. 定义类时直接通过extends关键字指明要继承的父类.子类对 ...

  6. Java SE 第十六讲----面向对象特征之继承

    1.继承(inheritance):Java是单继承的,意味着一个类只能从另一个类继承(被继承的类叫做父类也叫[基类 baseclass]),继承的类叫做子类,java中的继承使用extends关键字 ...

  7. python基础之面向对象的多继承以及MRO算法

    内容梗概: 1. python多继承 2. python经典类的MRO 3. python新式类的MRO C3算法 1.python多继承 class Shen: def fly(self): pri ...

  8. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  9. C&num;基础总结之八面向对象知识点总结-继承与多态-接口

    .方法深入讲解(返回值,形参与实参) 方法 public int getName(int i,int j) { int sum = i + j; return sum; } .利用泛型存储对象数据 . ...

随机推荐

  1. 小白详细讲解快速幂--杭电oj2035-A&Hat;B

    Problem Description 求A^B的最后三位数表示的整数.说明:A^B的含义是“A的B次方”  Input 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<= ...

  2. 【M3】绝对不要以多态方式处理数组

    1.考虑下面的情况,有个方法,如下: void Print(ostream& s, const Base array[], int size) { for(int i=0; i< siz ...

  3. wamp设置实现本机IP或者局域网访问 &lpar;转&rpar;

    <Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Allow from all #以前是De ...

  4. Newtonsoft&period;Json&period;dll使用

    1:Newtonsoft.Json.dll 下载  http://json.codeplex.com/ 2:解析JSON字符窜 方法1: using Newtonsoft.Json; using Sy ...

  5. Linux性能优化实战:系统的swap变高(09)

    一.实验环境 1.操作系统 root@openstack:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu ...

  6. Tornado-Secure cookie and Session

    这一节涉及的内容有: 1.客户端和服务端操作cookie的方法 2.secure cookie的机制 3.基本/自定义session 文件结构 三个启动文件由下往上对应的分别是三种服务端:使用secu ...

  7. C&plus;&plus;学习笔记53:泛型程序设计与C&plus;&plus;标准模板库

    泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++模板为泛型编程程序设计奠定了关键的基础 模型:符合一个概念的数据类型称为该概念的模型,例如: ...

  8. Apache Ant安装 验证

    1.下载Apache Ant 去官网下载ant,官网地址:http://ant.apache.org/ 我下载的是apache-ant-1.10.1-bin.zip 直接解压,放到制定目录下,如C:\ ...

  9. 17&period;出现fatal signal&lpar;SIGSEGV&rpar;&comma;code 1&comma;fault addr 0x0 in tid 29931的问题

    原因是: 在onCreate方法里面调一些东西的时候,有时候系统相关的东西还没有初始化完,你的代码就已经执行了,会出现一些问题  解决方法: 增加延时1s /一.第一步初始化,此处用的是demo的ap ...

  10. oracle 创建表并添加注释

    CREATE TABLE t1(id varchar2(32) primary key,name VARCHAR2(32) ,age VARCHAR2(32) ) 添加表注释:COMMENT ON t ...