面向对象三大特性

继承

public

protected

private

public继承

public

protected

不可见

private继承

private

private

不可见

protected继承

protected

protected

不可见

封装

封装和数据抽象的作用

a.避免类内部出现无意的.可能破坏类对象状态的用户级错误。

b.随着时间推移可以根据需求改变或bug报告来完善类实现,而无须改变用户级代码。

多态

多态要素:基类指针或引用虚函数(一个接口,多种方法)

多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的,就是说地址是早绑定的。而如果函数调用的地址不能在编译器期间确定,需要在运行时才确定,这就属于晚绑定

  1. class father
  2. {
  3. public:
  4. void drink()
  5. {
  6. cout<<"father drink"<<endl;
  7. }
  8.  
  9. virtual void eat()
  10. {
  11. cout<<"father eat"<<endl;
  12. }
  13.  
  14. };
  15. class son:public father
  16. {
  17. void drink()
  18. {
  19. cout<<"son drink"<<endl;
  20. }
  21.  
  22. virtual void eat()//此处可以不用加virtual也可以,默认就有virtual
  23. {
  24. cout<<"son eat"<<endl;
  25. }
  26. };
  27. int main()
  28. {
  29. father f;
  30. son s;
  31.  
  32. father *fptr=&f;
  33. fptr->drink();
  34. fptr->eat();
  35.  
  36. fptr=&s;
  37.  
  38. fptr->drink();
  39. fptr->eat();
  40. }

输出

father drink

father eat

father drink

son eat

重载 重写 覆盖(重定义)

一、重载(overload)

指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。

同一层次,同名不同参, virtual和返回值不影响

二、重写(也称为覆盖 override)
是指派生类重新定义基类的虚函数,特征是:

不同层次,同名同参同virtual同返回值,访问修饰符可变

三、重定义(也成隐藏)

不同层次,返回值不影响

参数同,则基类函数被隐藏(区别于重载和重写)

参数异,若基类函数无virtual,基类被隐藏(区别于重写)

  1. class Base
  2. {
  3. public:
  4. virtual void a(int x) { cout << "Base::a(int)" << endl; }
  5. // overload the Base::a(int) function
  6. virtual void a(double x) { cout << "Base::a(double)" << endl; }
  7. virtual void b(int x) { cout << "Base::b(int)" << endl; }
  8. void c(int x) { cout << "Base::c(int)" << endl; }
  9. };
  10.  
  11. class Derived : public Base
  12. {
  13. public:
  14. // redefine the Base::a() function
  15. void a(complex<double> x) { cout << "Derived::a(complex)" << endl; }
  16. // override the Base::b(int) function
  17. void b(int x) { cout << "Derived::b(int)" << endl; }
  18. // redefine the Base::c() function
  19. void c(int x) { cout << "Derived::c(int)" << endl; }
  20. };

C++面向对象三大特性的更多相关文章

  1. [.net 面向对象编程基础] (11) 面向对象三大特性——封装

    [.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承. ...

  2. [.net 面向对象编程基础] (12) 面向对象三大特性——继承

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

  3. [.net 面向对象编程基础] (13) 面向对象三大特性——多态

    [.net 面向对象编程基础] (13) 面向对象三大特性——多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...

  4. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

  5. JAVA基础——面向对象三大特性:封装、继承、多态

    JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...

  6. day20面向对象三大特性 , 类嵌套

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.简述面向对象三大特性并用代码表示."""封装:class Account: ...

  7. python 面向对象(三大特性)

    python 面向对象(初级) (思维导图 ↑↑↑↑↑) 概述: 面向过程:根据业务逻辑从上到下垒代码. 函数式:将某功能代码封装至函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  8. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

  9. python面向对象三大特性

    面向对象的三大特性: 封装.继承和多态 一.封装 封装,顾名思义就是将内容封装到某个地方,以后可以直接调用被封装到某处的内容. - 将内容封装到某处 - 从某处调用被封装的内容 第一步,将内容封装到某 ...

随机推荐

  1. 绕过图片格式限制上传木马获取WebShell

    思路: 图片上传功能中,前端页面上传的是.png格式的图片文件,但是抓包Request中修改图片后缀为.php 可以绕过对上传文件格式的限制,文件的上传路径可以在上传后的页面或查看上传成功后的resp ...

  2. python学习笔记八--动态类型

    一.变量,对象,引用: 1. 变量: 2. 对象:均包含了一个头部信息,有以下两部分内容 a.对象的数据类型, b.引用计数器:纪录当前引用货指向该对象的数量,一旦计数器被清零,该对象的内存空间就会被 ...

  3. hdu4639Hehe

    http://acm.hdu.edu.cn/showproblem.php?pid=4639 统计连续he的数量恰为斐波序列  不同块进行相乘 #include <iostream> #i ...

  4. Json.net 同过 JsonConverter 调整导出值(未完成)

    public class TimeSpanConverter : JsonConverter { public override bool CanConvert(Type objectType) { ...

  5. OWIN katana注册中间件的几种写法

    首先特别说明下在startup中注册完中间件的两个注意事项,看到有人写的东西有误导人的作用.关于startup启动发现类的内容,参照这里 http://www.asp.net/aspnet/overv ...

  6. JavaScript NodeList和Array

    原文引用脚本之家作者:Jeff Wong,谢谢大神提供资源 在Web前端编程中,我们通常会通过document.getElementsByTagName或者document.getElementsBy ...

  7. Spring MVC 教程

    目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...

  8. mysql slave 错误解决

    执行CHANGE MASTER TO master_host............后报错 ERROR 1201 (HY000): Could not initialize master info s ...

  9. 在win2008中配置ServU

    因为08的防火墙要求比较高.很多端口都关闭,所以要设置防火墙. 首先设置入站规则 1.新建一条规则,规则类型选择“端口”,然后TCP,设置为20-21,60010-60020,然后允许链接,在配置文件 ...

  10. JS中图片的放大缩小没反应

    这段代码无反应: 代码如下: <script type="text/javascript"> onload = function () { document.getEl ...