您的位置:首页 > 编程语言 > C语言/C++

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 联合:不能有静态成员,并且不能包含带有构造函数或者析构函数的对象,因为编译器不知道要使用哪些变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐