面向对象程序设计(1)-OOP概述
来源:互联网 发布:ftp服务器端口默认为 编辑:程序博客网 时间:2024/05/02 00:09
【认识】面向对象程序基于三个基本概念:
- 数据抽象:可以将类的接口与实现分离;
- 继承:可以定义相似类型并对其相似关系建模;
- 动态绑定:可以在一定程度上忽略相似类型的区别,以同一的方式使用它们的对象。
继承
【认识】通过继承联系在一起的类构成一种层次关系;
基类:位于层次的根部,层次的其他类直接或间接地从基类继承而来,负责定义层次关系中所有类共同拥有的成员;
派生类: 通过继承基类而得到的是为派生类,定义各自特有的成员;
定义基类与派生类
【例子】定义基类
//定义Queote 基类class Quote{public: Quote() = default;//默认构造函数 Quote(const std::string &book, double sales_price): bookNo(book), price(sales_price) { } std::string& isbn() const { return bookNo;} virtual double net_price (std::size_t n) const { return n * price; } //基类给定数量的书籍销售总额 //派生类负责改写并使用不同折扣的计算算法 virtual ~Quote() = default; //对析构函数进行动态绑定private: std::string bookNo; //书籍的ISBN 编号protected: double price = 0.0; //普通状态下不打折的价格};
注:
- 派生类需要对
virtual
修饰的函数重新定义以覆盖从积累继承而来的旧定义。 - 对于虚函数,当我们使用指针或引用时(其他方式呢?),该调用将被动态绑定,根据绑定的对象不同,调用可能执行不同的版本。
成员函数与继承:
- 任何构造函数之外的非静态函数都可以是虚函数;
- 关键字
virtual
只能在类内部的声明语句之前不能用于类外部的函数定义。
访问控制:
- 默认情况下,派生类的成员函数智能访问共有成员,不能访问私有成员;
- 可以设置
protected
访问运算符修饰的成员,派生类有权访问该成员,同时禁止其他用户访问。
【例子】定义派生类
class Bulk_Quote: Quote{public: Bulk_Quote() = default; Bulk_Quote (const std::string&, double, std::size_t, double ); double net_price(std::size_t) const override;private: std::size_t min_qty = 0; double discount = 0.0;};
动态绑定
【认识】动态绑定可以使用同一段代码分别处理基类与派生类。
e.g:同一段代码(函数)运行时调用类中的函数,具体调用的版本是基类还是派生类,由运行时传入的类类型的实参决定。
动态绑定(dynamic binding)又被称为运行时绑定(run-time binding)。
派生类
派生类向基类的类型转换:
(1)可以把派生类的对象当成基类对象来使用;
(2)基类类型的指针或引用绑定到派生类对象的基类部分上;
(3)derived-to-base类型转换由编译器隐式地执行。
【例子】
Quote item;Bulk_quote bulk;Quote *p = &item;p = &bulk; //p指向bulk的Quote部分Quote &r = bulk; //r绑定到bulk的Quote部分
派生类的构造函数:
每个类控制它自己的成员初始化过程,因此派生类不能直接初始化从基类继承而来的成员,必须使用基类的构造函数来初始化它的基类部分。
【例子】
Bulk_quote::Bulk_quote(const std::string& book, double p, std::size_t qty, double disc) : Quote(book,p), min_qty(qty),discount(disc) { }
继承类的静态成员
基类中定义了一个静态成员,则整个继承体系中只存在该成员的唯一的定义。
0 0
- 面向对象程序设计(1)-OOP概述
- 面向对象程序设计(OOP)1
- java面向对象的程序设计(oop)
- 面向对象程序设计(OOP)2
- Java OOP--面向对象程序设计
- 面向对象程序设计概述
- 面向对象程序设计(Object-oriented programming,OOP)
- 《Kotlin 程序设计》第五章 Kotlin 面向对象编程(OOP)
- 第1节 面向对象程序设计概述
- PHP面向对象的程序设计(概述)
- OOP(面向对象)
- OOP(Object Oriented Programming 面向对象程序设计)
- 面向对象程序设计(OOP-Object Oriented Programming)
- 面向对象程序设计(OOP)的六大原则
- 面向对象程序设计(OOP)的六大原则
- 面向对象程序设计(OOP)的六大原则
- 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)
- 面向对象程序设计技术概述
- 【备忘】 vscode 必备插件
- Table被web编程弃用的原因
- nodejs自动化环境搭建
- jQuery表单验证Validata
- 当Culture遇上DateTimeFormat
- 面向对象程序设计(1)-OOP概述
- 实现一个Unity3d的WaitForSeconds
- HDU 1232 畅通工程
- 全世界只有我们Erlang程序员是正确的
- Hadoop学习之HBase入门
- ProtoBuf在Unity3D中的简单使用!
- POJ 3669 小坑
- ActiveMQ——消息队列基础篇
- c++ map