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; } .利用泛型存储对象数据 . ...
随机推荐
- 一些常用的JS函数
//获取元素属性 function getStyle(obj, attr) { return obj.currentStyle ? obj.currentStyle[attr] : getComput ...
- Oracle EBS-SQL (WIP-16):检查期间手工下达的车间任务数.sql
select WE.DESCRIPTION 任务说明, --DECODE( ...
- mysql-bin.000001文件的来源及处理方法
用ports安装了mysql以后,过一段时间发现/var空间不足了,查一下,会发现是mysql-bin.000001.mysql-bin.000002等文件占用了空间,那么这些文件是干吗的?这是数据库 ...
- Android消息推送之GCM方式(二)
<声明> 转载请保留本来源地址: http://blog.csdn.net/wzg_1987/article/details/9148023 上一节讲了GCM方式实现前的一些必要准备工作, ...
- 服务器:RAID、AHCI、IDE
RAID 独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方(因此,冗余地)的方法.通过把数据放在多个硬盘上 ...
- C# 中4个访问符和8个修饰符详解
4个访问修饰符(是添加到类.结构或成员声明的关键字) Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. Internal:内部的,是类型和类型成员的访问修饰符.同一个程序集中的所 ...
- 下载安装tomcat6.0
tomcat的安装 1.先下载tomcat,到http://tomcat.apache.org/ 2.注意,下载可以下载zip格式或exe格式的,其中zip格式的只要解压缩再配置下环境变量就可以使 ...
- ASP.NET对路径"xxxxx"的访问被拒绝的解决方法小结
异常详细信息: System.UnauthorizedAccessException: 对路径“D:/temp1/MyTest.txt”的访问被拒绝 在windows 2003下,在运行web ...
- Emoji字符检查与替换
当文本包含Emoji字符的时候,存储到数据库或读取的时候需要进行编码和解码(如UTF_8),否则MySQL的存储可能有异常. 当有的文本不允许输入Emoji字符,或者显示时需要将Emoji替换为指定字 ...
- IOS app启动过程
1.main函数 2.UIApplicationMain * 创建UIApplication对象 * 创建UIApplication的delegate对象 3.delegate对象开始处理(监 ...