c++面向对象的编程

简介: 一、概述:   面向对象编程基于三个基本概念:数据抽象、继承和 动态绑定;   在c++中,用类进行数据抽象; 用类派生从一个类继承另一个类:派生类继承基类的成员;   多态:动态绑定使编译器能够在 运行时  决定是使用基类中定义的函数还是派生类中定义的函数;   面向对象编程的关键思想是多态性(polymorphism);实现多态必须通过:1、继承  2、动态绑定     通过动态绑定(dynamic binding)能够编写程序使用继承层次中任意类型的对象,无须关心对象的具体类型。

一、概述:

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

  在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  */

 

相关文章
|
20天前
|
安全 算法 C++
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
44 3
|
22天前
|
安全 算法 编译器
【C++ 泛型编程 进阶篇】深入探究C++模板参数推导:从基础到高级
【C++ 泛型编程 进阶篇】深入探究C++模板参数推导:从基础到高级
240 3
|
22天前
|
存储 算法 编译器
【C++ TypeName用法 】掌握C++中的TypeName:模板编程的瑞士军刀
【C++ TypeName用法 】掌握C++中的TypeName:模板编程的瑞士军刀
233 0
|
22天前
|
安全 算法 C++
【C++泛型编程 进阶篇】模板返回值的优雅处理(二)
【C++泛型编程 进阶篇】模板返回值的优雅处理
31 0
|
22天前
|
安全 算法 编译器
【C++泛型编程 进阶篇】模板返回值的优雅处理(一)
【C++泛型编程 进阶篇】模板返回值的优雅处理
42 0
|
22天前
|
存储 网络协议 C语言
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
76 0
|
22天前
|
算法 编译器 数据库
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
243 0
|
22天前
|
机器学习/深度学习 算法 编译器
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
46 0
|
22天前
|
设计模式 程序员 C++
【C++ 泛型编程 高级篇】C++模板元编程:使用模板特化 灵活提取嵌套类型与多容器兼容性
【C++ 泛型编程 高级篇】C++模板元编程:使用模板特化 灵活提取嵌套类型与多容器兼容性
214 2
|
22天前
|
算法 安全 C++
【C++ 泛型编程 入门篇】深入探索C++的numeric_limits:全面理解数值界限(一)
【C++ 泛型编程 入门篇】深入探索C++的numeric_limits:全面理解数值界限
43 0