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; } .利用泛型存储对象数据 . ...
随机推荐
- 【Java 小实验】重写(覆写 Override)返回值类型能不能相同
背景 每次看到重写那里写着: 重写机制是指子类的方法的方法名.参数表.返回值与父类中被重写的方法都相同,而方法体不同. 而重载是: 方法名与父类中的相同,而参数表不同,则属于同名方法的重载. 本来的感 ...
- gulp api
gulp api 简介 gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成 gulp是基于Nod ...
- VS2012编译错误信息,错误列表却没显示
今天在写代码的时候,发现VS有编译错误,在错误列表里面却没有显示错误信息,百思不得其解. 后来终于发现,错误列表弄了个筛选,所以就看不到错误信息了,晕死.有遇到该问题的,可以参考下.
- ubuntu14.04 qt4开发环境搭建(vnc use gnome)
1,安装qt开发环境软件包:apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer qtcreator; 2 ...
- Android 给Button加个监听
1.日期设置控件:DatePickerDialog 2.时间设置控件:TimePickerDialog 实例代码 1.页面添加两个Button,单击分别显示日期设置控件和时间设置控件,还是有TextV ...
- warning C4133: “函数”: 从“char [5]”到“LPCWSTR”的类型不兼容
弹窗打开一个网页,但是报错,代码如下: #include <stdio.h> #include <windows.h> void main() { ShellExecute(, ...
- ASP.NET 验证码 不同浏览器 不刷新问题
具体为什么不刷新是缓存机制不同,验证码图片的src或ImageUrl的获取是来自一个文件,由于连接地址没变所以不同内核浏览器有的会认为源没有变,解决办法就是在连接后面加上一个随机参数如可以用JS的Ma ...
- ASP.NET MVC4 json序列化器
ASP.NET MVC4中调用WEB API的四个方法 2012年06月07日00:05 it168网站原创 作者:廖煜嵘 编辑:景保玉 我要评论(0) [IT168技术]当今的软件开发中,设计软件的 ...
- Android dump .so 文件crash log
众所周知,在android系统上,有时候我们遇到so文件的crash仅仅能打log,可是非常多时候并不知道crash在什么地方,幸运的是crash后,一般能够产生一个.dmp文件. 我们能够依据这个文 ...
- 常用的sql server规范
常见的字段类型选择1.字符类型建议采用varchar/nvarchar数据类型2.金额货币建议采用money数据类型3.科学计数建议采用numeric数据类型4. 自增长标识建议采用bigint数据类 ...