zoukankan      html  css  js  c++  java
  • c++面向对象的编程

    一、概述:

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

      在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  */
  • 相关阅读:
    IOS触摸事件
    IOS中内存管理机制浅解
    Info.plist与Prefix.pch修改文件位置遇到的问题及解决方法
    block使用小结、在arc中使用block、如何防止循环引用
    __block的作用
    ios中键值编码kvc和键值监听kvo的特性及详解
    ios多线程开发的常用三种方式
    Xcode7连接网络设置
    不能弹出虚拟键盘的解决办法
    【测试工具】moco入门(一)
  • 原文地址:https://www.cnblogs.com/chris-cp/p/4376583.html
Copyright © 2011-2022 走看看