《C++程序设计-谭浩强》读书笔记

第一篇 基本知识

  • 字符串常量:"abc\n"包含4个字符,但是内存中占有5个字节(包含"\n"结束字符)。
  • 强制类型转换运算符:在强制类型转换时,得到一个所需类型中间变量,但原来的变量的类型未发生改变,eg:(int)x, 如果x原指定为float类型值为3.6, 强制转换后得到int型值为3,但是x得类型与值并没有发生变化。
  • C++的输入与输出:在执行cout语句时,并不是一插入一个数据就马上输出,而是将数据放入缓冲区,直到缓冲区满或者遇到endl(或'\n'、ends flush等)为止,此时将缓冲区中的数据一并输出,并清空缓冲区;在执行cin语句时,系统会将空格作为数据的间隔符,回车换行键作为结束符。所以这两个字符不能作为字符变量的输入,但是getchar函数可以。
  • 运算符的优先级:!(非)>算术运算符 > 关系运算符 > &&(与)和||(非) > 赋值运算符

第二篇 基于过程的程序设计

  • 条件表达式:(a>b)?a:b,如果(a>b)为真,这表达式值取a,否则取b。
  • switch语句:switch(表达式) {} 表达式可以为任何类型,记住break、default。
  • while和do-while语句:while先判断表达式,然后决定是否进入语句;do-while先进入一次语句,再判断表达式。
  • break和continue:break是结束整个循环,continue是结束本次循环进入下次循环
  • 内置函数(inline):内置函数中不应该包括复杂的控制语句,如循环和switch语句,内置函数的作用是减少函数调用的时间开销,但是在编译时增加了代码的长度。
  • 函数的重载:一名多用,根据函数的参数个数和类型的不同,用同一个函数名定义多个函数。
  • 函数模板:通用函数,调用函数时会根据实参的类型来取代模板中的虚拟类型。
  • 有默认参数的函数:默认参数必须放在形参的表列的最右端;一个函数不能即作为函数重载,又作为默认参数的函数,否则会产生二义性。
  • 函数的递归调用:递归公式+递归结束的条件(边界条件)。
  • 变量的作用域、生命周期:
(1)按照作用域可分为局部变量(动态局部变量、静态局部变量和函数形参)和全局变量(静态全局变量、外部变量);
(2)按照生命期可分为动态存储(动态局部变量、函数形参等)和静态存储(静态局部变量、静态外部变量和外部变量等)
  • 内部函数(static)和外部函数(extern,可省略):内部函数只能被本函数调用,外部函数能够被其他文件调用,现在常用包含头文件的方法。
  • include命令的两种形式:
(1)`#include<文件名>` 例如`#include<iostream>`包含的是C++系统提供的头文件;
(2)`#include"文件名"`例如`#include"c:\tan\file.c"`要求编译系统在指定路径寻找头文件,例如`#include"file.c"`在用户程序当前路径下寻找文件。
  • 字符串处理函数:
(1)字符串连接函数strcat,函数原型为`strcat(char[],const char[])`;
(2)字符串复制函数strcpy,函数原型为`strcpy(char[], const char[])`;
(3)字符串比较函数strcmp,函数原型为`strcmp(const char[], const char[])`;
(4)字符串长度函数strlen,函数原型为`strlen(const char[])`。

注意:可以用字符串常量初始化字符数组,但不能用字符串常量给字符数组赋值;可以用字符串常量初始化和赋值字符串变量。

  • 指针作为函数形参:
(1)正确的例子
void swap(int *p1, int *p2 )
{
  int temp; temp=*p1; *p1=*p2; *p2=temp;
}
(2)错误的例子
void swap(int *p1, int *p2)
 {
   int *temp; *temp=*p1; *p1=*p2; *p2=*temp;
 }
分析:例二中定义了指针变量temp,未对该指针变量赋值(指向对象),但是对*temp赋值是非常危险的,可能会破坏系统的正常工作。
  • 引用一个数组元素:(1):下标法a[i]   (2):指针法*(a+i)或*(p+i)其中a为数组名,p为指向数组某元素的指针。
  • 指针与自加运算:
(1) *p++等价于*(p++)先得到p指向变量的值*p,再使p指针加1;
(2) *(++p)先对p指针值加1,再取p指向变量的值;
(3) (*p)++表示对p所指向变量的值加1。
  • 指针数组和数组指针:
(1)指针数组:int *p[n] 数组由n个指向整型数据的指针元素组成;
(2)数组指针: int (*p)[n] p为指向n个整型元素的指针变量。
  • 引用:在声明一个引用类型变量时,必须同时使之初始化,即声明它代表那一个变量,引用主要把它作为函数的参数,以扩充函数传递数据的功能,它向形参传递的是实参的地址而不是实参的值。指针变量作为形参是需要开辟内存空间,而引用变量不是一个独立的变量,不单独占内存空间。

  • 共用体(union):使用共用体的目的是希望用同一个内存段存放几种不同类型的数据,共用体变量所占内存的长度等于最长的成员的长度,共用体变量在访问成员是在每一瞬间只能有一个成员起作用,其他成员不起作用。

  • 枚举类型(enum):格式为 enum 枚举类型名 {枚举常量列表};枚举元素为常量,因此不能对他们赋值。

第三篇 基于对象的程序设计

  • 成员函数的存储方式:每个对象所占用的存储空间只是该对象的非static数据部分的所占用的空间,而不包括函数代码和static成员变量所占用的空间,不同的对象通过this指针调用成员函数。
  • 函数初始化列表:例如Box::Box(int n, int w, int len): height(h),width(w),length(len) {}.
  • 共用数据的保护(const):    
(1)常对象:常对象中数据成员为const型,成员函数为non-const型,外部不能调用该对象的non-const成员函数。`
(2)常成员数据:只能通过构造函数的参数初始化列表来对常成员函数初始化
(3)常成员函数:只能引用本类的数据成员,而不能修改它
数据成员非const成员函数const成员函数
非const成员数据可以引用,也可以改变其值可以引用,但不可以改变其值
const成员数据可以引用,但不可以改变其值可以引用,但不可以改变其值
const对象的成员数据不允许可以引用,但不可以改变其值

 

  • const与指针(左定值,右定向):
(1) const 类型名 *指针变量名:指向常对象的指针变量(左定值)
(2) 类名 * const指针变量名:指向对象的常指针(右定向)
  • 实现数据的共享(static):
(1)静态数据成员:静态数据成员在内存中只占一份空间;它属于类,不属于对象,为对象非配内存空间时不包括静态成员所占的空间;静态成员的初始化只能在类体外进行;静态数据成员既可通过对象名引用,也可通过类名引用。
(2)静态成员函数:静态成员函数主要是用来访问静态数据成员的,而不能访问非静态成员(没有this指针);静态成员函数可以通过对象名引用,夜可以通过类名引用。

转载于:https://www.cnblogs.com/ChrisCoder/p/9795647.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值