C++程序设计语言学习笔记(一)
2013-05-26 14:54
260 查看
C++程序设计语言
该书主要介绍C++语言的基础以及如何利用它进行程序设计。学习任何一本语言如果只沉浸在语言本身特征,你的收获会比较小,关键是程序设计思想。里面提到的一句话很重要“对于程序语言设计和设计技术的理解远比细节的理解更重要,而这种理解的根本是时间和实践”。一般程序设计都会有三个过程:分析、设计、编码。一般程序员开始的时候花在分析和设计上的时间较少,开发之初就上手编程,容易照成后期维护修改比较困难,这种程序员一般用10%分析,20%设计,30%编码,40%找bug加维护;对于一个高级程序员来说会花40%分析,40%设计,20%编码加维护。第一部分:C++基础
什么是C++?C++是
· 一种通用的程序设计语言,特别是面向对象程序设计· 更好的C
· 支持数据抽象
· 支持面向对象程序设计
· 支持通用性程序设计
C++相对于C的好处:
· 完全兼容C· 编程思路的改变:过程式编程>抽象编程
· 将数据和算法进行隐藏:信息隐藏
· 代码复用
· 模块编程
C++中的类型
· bool类型o 占用1个字节
o true:任何非0值或者非空指针;false:0或者空指针
o true,可以转换为1;false转换为0
· char类型
o 占用一个字节
o wchar_t:宽字符,一般和int一样大
· int类型
o 32或者64位系统上不同,一般为4或者8个字节
o short、int、long->unsigned short,unsigned int, unsigned long
o 十进制 1;八进制:0123;十六进制:0x1bc
o 无符号数:12U
o long:12L
· 浮点数-float、double
o 4或者8字节,一般使用double
o 1.23f
· void类型
o 表示没有对象,不能void x
o 可以声明void * p
· 作用域
o 一个变量的范围一般限制在{}之内,{}内的变量会屏蔽上一级别的同名变量
o 可以通过::x来访问全局的被屏蔽的变量
o 局部被屏蔽的变量不能被访问到
· 初始化
o 全局的、名字空间内或者静态对象会被适当的初始化为0,如果没有定义的话
o 局部变量或者在堆上声明的变量默认不会初始化,谨慎使用。
· const与指针
o const char *p1:p1是一个指针指向常量char,表示p指向的内容不能改变,可以指向其他变量
o char const *p2:同p1
o char *const p3:p3是一个常量指针指向char,表示p只能指向某变量,不能改变,但是其指向的值可以改变
o const char *const p4:
o 将声明从右向左读出来即可。
o const有限制作用域的功效。在头文件里定义变量,限制该变量作用于该文件,static有类似功能
· 引用
o 指向一个变量:左值
o const T&可以指向一个非左值,甚至非T类型的,其操作是先进行隐式类型转换为T,然后进行赋值,直到作用域结束时才结束
o const double&x = 1
o double tmp = double(x)
o const double&x = tmp
· 结构体struct
o 不同类型变量的汇总
o 结构的大小不一定是所有变量的sizeof之和,可能会有一些对其操作,即保证 对int类型的倍数
· 运算符
o 尽量通过括号确定优先级
o 默认情况下,内存不足时,new对象时会抛出bad_alloc异常,可以通过try进行捕获
o 显示类型转换:
§ static_cast<T>、const_cast<T>、dynamic_cast<T>、reinterpret_cast<T>
· 函数
o 传值、传指针、引用
o 返回值:绝不不能返回局部变量的指针或者引用
o 默认参数:均要放置在参数列表的最后
· 名字空间
o 防止命名冲突和模块化
o 显式命名空间:namespace xx{}
o 隐式命名空间:namespace {}
o 重新命名名字空间:namespace ATT = AbcTT
o 命名空间组合和选择
§ 名字查找:本空间内、直接显式声明、其他声明空间
· 程序组织
o 源文件
o 预处理-编译-连接-可执行程序
o 头文件里面应该放什么?
o ODR:单一定义规则
o extern “C”是一种连接约定,不是一种语言,表明应该按照C连接约定进行连接
类
· 类的定义· 访问控制:private、public、protected
· 比较重要的几类函数:构造函数、赋值运算符、复制构造函数、析构函数
o 何时调用赋值运算符、何时调用复制构造函数?
§ 一般而言对未初始化的变量完成初始化调用:复制构造函数,例如A a(b)、A a=b、f(a)?
§ 对已经初始化的变量重新赋值调用:赋值操作符,A a,b; a=b
· 静态成员:必须在其他地方进行定义
· const成员函数,
o 即在成员后边添加const关键字,表明该函数不会改变对象状态,定义的时候也需要添加
o const对象和非const对象均可以调用const成员函数,非const成员只能被非const对象调用
· this指针
o 一般成员为X*,const成员为const X*
o 如果需要在const成员函数里面,改变对象状态,可以通过const_cast<T>强制去掉this指针的const属性
o 但是如果对象本身就是const类型的,即const A a;此时便不能进行操作,可以通过定义mutable变量
o mutable类型变量是指该变量不可能是const类型的
· 类和struct
o 不同点:类默认访问均为私有的,struct默认为公有的,其他基本无区别。
o 一般变量全部为公有时,考虑使用struct,其他使用class
· 构造函数和析构函数调用
o 局部对象,按照变量定义的顺序进行构造函数调用,按照定义顺序的逆顺序进行析构
o 自由区域的对象,在new时调用构造函数,delete时调用析构函数
o 类中的自定义对象初始化:在调用类本身的构造函数之前,会按照变量定义顺序依次初始化每一个成员变量。
§ 成员初始化列表:变量无默认构造函数、常量变量、引用变量
o 自定义对象的数组和vector的初始化:有默认构造函数的类型才能定义,并且调用N次构造函数和析构函数
o 局部静态对象,在该变量被初次执行到的时候调用构造函数,并且按照静态对象声明的顺序在进程结束时调用析构函数
o 非局部存储变量:全局变量、名字空间变量、以及各个类的static变量,将会在main函数之前进行调用构造函数,在main结束之后调用析构函数,按照变量定义的顺序进行析构。
o 临时对象的定义:临时对象可能会出现在计算表达式过程中,在用到时创建,并且在构造完完整表达式之后结束。
o 对象的放置:
o 联合:不能有静态成员,并且不能包含带有构造函数或者析构函数的对象,因为编译器不知道要使用哪些变量。
相关文章推荐
- C++程序设计语言学习笔记(三)
- C_PlusPlus学习笔记 - 4_C++程序结构 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- C_PlusPlus学习笔记 - 1_C++简单程序设计 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- C_PlusPlus学习笔记 - 0_绪论 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- C_PlusPlus学习笔记 - 2_函数 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- C++程序设计语言特别版 学习笔记(0)
- C_PlusPlus学习笔记 - 6_继承与派生(C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- C_PlusPlus学习笔记 - 5_数组、指针和字符串 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- C++程序设计语言学习笔记(二)
- C_PlusPlus学习笔记 - 3_类与对象 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- 面向对象与C++程序设计-类的继承与派生学习笔记
- C程序设计语言(K&R)学习笔记--5.extern小结
- 【学习笔记】C++高级程序设计:STL标准模板库
- C++ 学习笔记(15)面向对象程序设计(类、继承、虚函数、抽象类、using命令、容器与继承)
- Effective c++ 学习笔记——之条款1:视C++为一个语言联邦
- 【C++】【学习笔记】【001】CPP语言与OO思想介绍
- C程序设计语言(K&R)学习笔记--8.结构体
- C程序设计语言学习笔记(1)
- C程序设计语言(K&R)第三章学习笔记
- Python语言程序设计-学习笔记2:Python编程之基本方法