天天看点

c++之面向对象程序设计

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

OOP

面向对象程序设计(object-oriented programming)核心思想是数据抽象、继承和动态绑定。数据抽象实现类的接口与实现分离;使用继承,可以定义相似的类型并对其相似关系建模;使用动态绑定,可以在一定程度忽略相似类型的区别,用统一的方式使用它们的对象。

在c++语言中,当我们使用基类的引用(或指针)调用一个虚函数时将发生动态绑定。动态绑定又称运行时绑定。

定义基类和派生类

基类通常定义一个虚析构函数,即使不执行任何实际操作也应该如此。

防止继承发生:类名后跟关键词final。

虚函数

对虚函数的调用在运行时才被解析。

在某些情况下,希望虚函数的调用不要进行动态绑定,而是强迫执行虚函数的某个特定版本。使用作用域运算符(::)可以实现目的。通常情况,只有成员函数(或友元)中的代码才需要使用作用域运算符来回避虚函数机制。

抽象基类

访问控制与继承

和私有成员类似,受保护成员对于类的用户来说不可访问。

和公有成员类似,受保护成员对于派生类成员和友元来说可以访问。

派生类的成员或友元只能通过派生类对象来访问基类的受保护成员,派生类对一个基类对象中的受保护成员没有任何访问特权。

某个类对其继承来的成员访问限制受两个因素影响:一是基类中该成员的访问说明符,二是在派生类列表中的访问说明符。

类有两种不同用户:普通用户和类的实现者。普通用户编写代码使用类的对象,只能访问类的公有成员;实现者负责编写类的成员和友元代码,成员和友元既能访问类的共有部分,也能访问类的私有部分。

友元关系不能继承,基类的友元在访问派生类成员时不具有特殊性,派生类的友元也不能随意访问基类的成员

继承中的类作用域

派生类成员将隐藏同名的基类成员。

构造函数与拷贝控制

继续阅读