一、概述:

  面向对象编程基于三个基本概念:数据抽象、继承和 动态绑定

  在c++中,用类进行数据抽象; 用类派生从一个类继承另一个类:派生类继承基类的成员;

  多态:动态绑定使编译器能够在 运行时  决定是使用基类中定义的函数还是派生类中定义的函数;

  面向对象编程的关键思想是多态性(polymorphism);实现多态必须通过:1、继承  2、动态绑定

    通过动态绑定(dynamic binding)能够编写程序使用继承层次中任意类型的对象,无须关心对象的具体类型。使用这些类的程序

  无须区分函数是在基类还是在派生类中定义的;

  在c++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键。用引用(或指针)调用的虚函数在运行是确定,被调用的函数是引用(或指针)所指对象的实际类型所定义的;

 1 void print(const base &item, size_t n)
 2 {
 3         os << item.net_price(n) <<endl;
 4 }
 5 /*
 6  *base base1;
 7  *diver diver1;      //diver继承base;
 8  *
 9  * net_price(size_t t)在base为virtual函数,并有实现(非纯虚函数)
10  * net_price(size_t t)在diver内也进行了函数实现
11  *
12  *在print中调用基类中net_price()还是派生类中的net_price()呢?
13  *      这个是由程序在运行时决定的,关键在于看参数base&的引用
14  *   是指向基类对象呢,还是指向派生类对象呢,来直接确定的;
15  *(实现的基础是:基类的引用即可以指向基类对象也可以指向派生类对象)
16  */

 1 class Item_base{
 2 public:
 3         Item_base(const std::string &book="",
 4                   double sales_price=0.0):
 5         isbn(book), price(sales_price)
 6         {
 7         }
 8
 9         std::string book() const
10         {
11                 return isbn;
12         }
13         virtual double net_price(std::size_t n) const
14         {
15                 return n*price;
16         }
17         virtual ~Item_base()
18         {
19         }
20 private:
21 private:
22         std::string isbn;
23 protected:
24         std::string isbn;
25 protected:
26         }
27 private:
28         std::string isbn;
29 protected:
30         double price;
31 }
32 /*除了构造函数之外,(析构函数最好加virtual)任意非static成员函数都可以是虚函数。
33  *保留字只能在类内部的成员函数声明中出现,不能用在类定义体外部出现的函数定义上;
34  */

转载于:https://www.cnblogs.com/chris-cp/p/4376583.html

c++面向对象的编程相关推荐

  1. 《C++面向对象高效编程(第2版)》——3.11 类名、成员函数名、参数类型和文档...

    本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第3章,第3.11节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区 ...

  2. python笔记2(函数 面向对象 文件编程 上下文管理器)

    记录python听课笔记 文章目录 记录python听课笔记 一,函数 1.介绍python里的函数 2.用户自定义函数 3.变量的作用域 4.参数的传递 5.参数的默认值 6.向函数内部批量传递数据 ...

  3. 《C++面向对象高效编程(第2版)》——2.29 泛化关系(is-a)

    本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第2章,第2.29节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区 ...

  4. 《C++面向对象高效编程(第2版)》——2.20 什么是多线程安全类

    本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第章,第2.20节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区& ...

  5. 《C++面向对象高效编程(第2版)》——2.30 has-a关系的重要性

    本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第2章,第2.30节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区 ...

  6. 《C++面向对象高效编程(第2版)》——导读

    前言 C++面向对象高效编程(第2版) 面向对象软件开发已逐渐成为开发软件的首选.优秀的面向对象软件开发人员.设计人员.系统架构师对其需求与日俱增.要想成为一名成功的面向对象编程(OOP)人员必须忘却 ...

  7. 《C++面向对象高效编程(第2版)》——3.13 采用语义

    本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第3章,第3.13节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区 ...

  8. 面向对象的编程学习笔记

    面向对象的编程区别于面向过程的编程,其操作的单元是类,而面向过程操作的单元是方法.即面向过程的编程是由一个又一个的方法组成的.而面向对象的编程是由一个又一个类组成的.相对于面向过程,面向对象的代码复用 ...

  9. 《C++面向对象高效编程(第2版)》——3.17 编写内存安全类

    本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第3章,第3.17节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区 ...

  10. 《C++面向对象高效编程(第2版)》——2.16 识别成员函数的目标对象

    本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第2章,第2.26节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区 ...

最新文章

  1. 国际运营商智慧城市探索与实践
  2. opengl 大作业_大学新生作业10米长!网友:确认过眼神,是我画不出的十米长卷……...
  3. 200G vs 400G:谁是数据中心网络下一站?
  4. igs时间和utc_UTC和GMT时间
  5. 日志审计携手DDoS防护助力云上安全
  6. 图解TCP三次握手和四次挥手!(简单易懂)
  7. 安卓3D游戏-神奇宝贝防御战
  8. git 创建webpack项目_使用webpack手动创建一个完整项目的全过程
  9. S5PV210体系结构与接口04:代码重定位 SDRAM初始化
  10. 每个 JavaScript 工程师都应懂的33个概念
  11. STC学习:“FM收音机”原理与测试说明
  12. DM6437定时器使用
  13. 开放式社区?太小儿科了,智慧城市才是重点
  14. Smartbi报表工具二次开发和集成能力怎么样?
  15. Python货币转换
  16. Linux基础命令01(ls , cd,clear,cat等)
  17. 电脑组装好了开机完全没反应?
  18. android obb在哪,obb是什么文件 obb文件怎么用
  19. 电力版 力控7.1 电力版 授权 硬件狗 USB加密狗 分享 下载
  20. Android模拟器检测体系梳理

热门文章

  1. 命题模式持续在变 你变不变
  2. 配置静态路由使用出站接口和下一跳IP的差别
  3. 爱奇艺拟发行5亿美元可转换优先债券
  4. 【踩坑之旅】-webpack (v4.8.1) + vue-cli (v2.5.3)升级准备
  5. Python之路(第九篇)Python文件操作
  6. 【Python之旅】第五篇(三):Python Socket多线程并发
  7. nVidia多显卡多GPU在Linux下的超频设置
  8. burn android images with fastboot
  9. Linux 常用命令操作
  10. 从客户端(...)中检测到有潜在危险的Request.Form 值的处理办法