C++Primer_学习笔记(二)

2.4面向对象的程序设计

面向对象的程序设计方法正是为我们提供了这样一种能力。基类(base class)可由继承(inheritance)提供。当一个IntArrayRC类(也就是一个带有范围检查的IntArray类)继承了IntArray类时,称其为派生类(derived class),他就可以访问IntArray的数据成员和成员函数,而不需要同时维护两份代码拷贝。新的类只需要提供实现其语意所必需的数据成员和成员函数。

在基类对象的程序设计中,通常类的提供者只有一个,但是类的用户有许多个。提供者设计并且通常会实现类。用户使用提供者的公有接口,行为的分离可通过将类分成公有与私有访问级别而反映出来。

在构造函数中由冒号分割出来的部分称为成员函数初始化列表(member initialization list),它提供了一种机制,可以向基类IntArry的构造函数传递参数。而子类的构造函数可以为空的,因为它的工作就是把参数传递给相关的基类构造函数。不用再提供显示的子类析构函数,因为派生类没有引入任何需要析构的数据成员。

2.5泛型设计

C++模板设施提供了一种机制,它能够将类成员函数定义内部的类型和值参数化(parameterizing)。这些参数在其他方面不变的代码中用作占位符,以后,这些参数会被绑定到实际类型上,可能是内置的类型,也可能是用户定义的类型。

备注:

C++用模板来实现泛型编程,模板分为函数模板和类模板。

基本概念:泛型编程范式GP:模板也叫参数类型多态化。泛型在编译时期确定,相比面向对象的虚函数多态,能够有更高的效率。泛型编程是从一个抽象层面描述一种类型的算法,不管容器类型是什么,是一种不同于OOP的角度来抽象具体算法。C++0X目前对GP的支持的趋势来看,确实如此,auto/varadic templates这些特性的加入象征着C++ GP的形式正越来越转向一种更纯粹的泛性语法描述。GP的一个主要的弱点就是它不是二进制可复用的,源码基本是公开的,因为编译时候才决定具体类型,决定了类型后就不能更改了不像OOP一样拥有关闭开放的原则。

2.6基于异常的设计

异常处理为“响应运行时刻的程序异常”提供了一个标准的语言级的设施,他支持统一的语法风格,也允许每个程序员进行调试。异常处理使得我们需要在程序中处处显式地测试异常状态,从而可以将测试异常状态的代码抽取出来,放入指定的、显式标记的代码块中,因此异常处理设施大大地减少了程序代码的长度和复杂度。

异常处理机制主要构成如下:

  1. 程序中异常出现的点。
  2. 程序中异常被处理的点。

2.7用其他名字来命名数组

在c++标准化之前,解决命名的重复问题,传统的做法就是在全局可见的名字上加一个唯一的字符串前缀。C++解决此问题的方法是:提供了语言一级的解决方案,名字空间机制是C++语言正对这个问题提供的语言一级的解决方案。名字空间机制允许我们封装名字,否则这些名字就有可能会污染(或被影响)全局名字空间(pollute the global namespace)。关键字namespace后面的名字标示了一个名字空间,它独立于全局名字空间,我们可以在里面放一些希望声明在函数或类之外的实体。之后可以通过限定修饰符(qualified name notation)来调用不同空间里的相同名称的函数。

2.8标准数组—向量

定义一个包含10个整形对象的向量和一个包含10个字符串对象的向量。

Eg:

     vector<int> ivec(10);

vetctor<string> svec(10);

要定义一个向量,必须包含相关头文件。  通过使用迭代器(iteratoor pair)来标记起始于结束位置

Eg:

#include<vector>

#include<iostram>

using namespace std;





int main()

{

int size = getSize();

vector<int> vec(size);

vector<int>::iterator iter = vec.begin();

for(int ix = 0;iter<vec.begin();++ix)

 *iter = ix;

//…

reutn 0;

}

vector库中提供的泛型算法:

  1. 搜索(search)算法:find()、find_if()、binary_search()、count()、count_if()。
  2. 分类(sorting)排序与通用(ordering)排序算法:sort()、partial_sort()、merge()、partition()、rotate()、reverse()、random_shuffle()。
  3. 删除(deletion)算法:unique()和remove()
  4. 算数(numeric)算法:accumulate()、partial_sum()、inner_product()、adjacent_difference()
  5. 生成(generation)和变异(mutation)算法:generate()、fill()、transformation()、copy()、for_each()。
  6. 关系(relational)算法:equal()、min()和max()。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值