c++基础 之 面向对象特征一 : 继承
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++基础 之 面向对象特征一 : 继承的更多相关文章
- [.net 面向对象编程基础] (12) 面向对象三大特性——继承
[.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...
- Python基础之面向对象3(继承)
一.继承相关概念 1.语法: 2.定义: 3.优缺点: 4.相关概念: 5.相关内置函数: 6.继承内存图: 7.多继承: 二.多态相关概念 1.定义及作用: 2.重写概念: 3.运算符重载: 定义: ...
- C#基础知识-面向对象思想之继承(八)
上一篇的标题编程思想我觉得不是很符合主题,因为编程思想的范围太大了,不仅仅是封装 继承 多态,所以比较符合主题的应该是面向对象思想.这一篇中将继续叙述面向对象思想中的继承. 从字面来看继承表达的意思已 ...
- Python 基础之面向对象类的继承与多态
一.继承 定义:一个类除了拥有自身的属性方法之外,还拥有另外一个类的属性和方法继承: 1.单继承 2.多继承子类: 一个类继承了另外一个类,那么这个类是子类(衍生类)父类:一个类继承了另外一个类,被继 ...
- 04_Java面向对象特征之继承与多态
1. 继承 Java继承的实现(只支持单继承,而不是多继承,但有接口的多实现) 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类. 定义类时直接通过extends关键字指明要继承的父类.子类对 ...
- Java SE 第十六讲----面向对象特征之继承
1.继承(inheritance):Java是单继承的,意味着一个类只能从另一个类继承(被继承的类叫做父类也叫[基类 baseclass]),继承的类叫做子类,java中的继承使用extends关键字 ...
- python基础之面向对象的多继承以及MRO算法
内容梗概: 1. python多继承 2. python经典类的MRO 3. python新式类的MRO C3算法 1.python多继承 class Shen: def fly(self): pri ...
- Java基础-面向对象第二特征之继承(Inheritance)
Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...
- C#基础总结之八面向对象知识点总结-继承与多态-接口
.方法深入讲解(返回值,形参与实参) 方法 public int getName(int i,int j) { int sum = i + j; return sum; } .利用泛型存储对象数据 . ...
随机推荐
- Google机器学习教程心得(二)决策树与可视化
Visualizing a Decision Tree Google Machine Learning Recipes 2 官方中文博客 http://chinagdg.org/2016/03/mac ...
- 移动网络山寨版(OpenBTS)的意义或者无意义 【1】
在美国内华达州北部,靠近加州的峡谷中,有一片平坦的沙漠,名叫黑岩沙漠(Black Rock Desert).自从1986年以来,每年夏天,在这片沙漠中,都会举办一个为期八天的狂欢节.这个狂欢节的名字叫 ...
- Buffer Cache(缓冲区缓存)篇:keep缓冲区池(保留池)
Buffer Cache可以有三个池 默认缓冲区池 keep缓冲区池 recycling缓冲区池 --保留池和回收池可以独立于sga中的其他缓存分配内存.创建表的时候可以在storage子句中使用b ...
- ubuntu14.04 qt4 C++开发环境搭建
preFace:文章包括gnome,vnc-server,qt4安装配置及集成; apt-get update && apt-get upgrade; <一,组件软件包安装> ...
- 学习wxpython的网站
http://xoomer.virgilio.it/infinity77/Phoenix/main.html https://wxpython.org/Phoenix/docs/html/main.h ...
- python代码中pass的用法
我们有时会在方法中写一些注释代码,用来提示这个方法是干嘛的之类,看下面代码: class Game_object: def __init__(self, name): self.name = name ...
- SharePoint 2013 WebPart属性面板配置
为WebPart添加右侧的属性面板,方便将来对于WebPart的配置,我们只需要在CustomWebPart.cs文件里面,声明一下变量即可: private string url = string. ...
- 创建SDE表空间
创建空间数据存储类型为ST_Geometry的要素类有2种方法:1)使用SDE创建要素类从9.3 开始,默认创建的要素类都使用ST_Geometry存储空间数据,9.3 版本之前,可以通过配置dbtu ...
- NOIP2012模拟试题【圆圈舞蹈( circle)
2.圆圈舞蹈( circle) [问题描述] 熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺 ...
- C++, const:
问题: const成员函数和普通成员函数可以是同名同参数吗? 可以,这是一种函数的重载. const成员函数可不可以修改对象的成员变量的值? 不可以修改.//error C3490: ...