C++ Primer Plus再读总结1

面向对象VS过程性

  与传统的过程性编程不同,面向对象强调的是在运行阶段,而不是编译阶段(即编译器将程序组合起来时)进行决策。书中将运行阶段和比做度假时,选择参观哪些景点取决于天气和当时的心情;而编译阶段决策更像不管在什么条件下,都坚持预先设定的日程安排。
  运行阶段决策提供了灵活性,可以根据当时的情况进行调整。
  实际编程中,当初始化数组时,传统方法要指定数组的长度,这就是编译阶段决策。提前决策有可能带来资源浪费,一种情况下绝大多数时候,包含20个元素的数组足够了,但程序有时需要处理200个元素。这样初始化数组的长度必须大于200,导致程序在大多数情况下都浪费了内存。
  面向对象将这样的决策推迟到运行阶段进行,使程序更灵活。在程序运行后,使用关键字new请求正确数量的内存以及使用指针来跟踪新分配的内存的位置。可以这次告诉它只需要20个元素,而还可以下次告诉它需要205个元素。
  在运行阶段做决策并非面向对象独有的,但使用C++编写这样的代码比使用C语言简单。

指针和const

  const有两种方式来修饰指针,分别是 (const * typename)和 (typename * const)。前者是指针指向一个常亮对象,不允许通过该指针修改修饰的变量;后者是将指针本身申明为常量,防止改变指针指向的位置。

// 指向const的指针
int a = 16;
int b = 8;
const * int p = &a;
*p++; //禁止修改p指向的值
*p = 10; //禁止修改p指向的值
p = &b; //允许p指向另一个变量
// const指针
int a = 16;
int b = 8;
int * const p = &a;
*p++; //允许修改p指向的值
*p = 10; //允许修改p指向的值
p = &b; //禁止p指向另一个变量

尽可能使用const

应尽量将指针参数声明为指向常量的数据,因为:

  1. 避免函数调用时修改数据;
  2. 可以处理传入的参数是const和非const两种情况,否则只能接受非const数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值