c++基础(反思)
时间:2010-12-01 来源:yuzhou133
C++是一门应用较广的程序设计语言,继承了c语言的全部的优点和功能外,还支持面向对象程序设计。C++语言是c语言的扩展,是c语言的超集。
现实世界中客观存在的事物都被称为对象,而具有相同特征的一类对象则可归为类。
面向对象程序设计的基础是对象和类。
面向对象程序的主要特征:封装性、继承性和多态性。
封装性:就是将一组数据和与这组数据有关的操作集合组装在一起,形成一个能动的实体,也就是对象。C++中通过建立类这个数据类型来支持封装性。
继承性:一个类具有另一个类的属性和行为。这个类具有另一个类的全部特征,又具有自身的独有特征。
C++中将其称为派生类(或子类),而将其所继承的类称为基类(父类)。
多态性:不同的对象调用相同名称的函数,并可导致完全不同的行为。C++中的多态性通过使用函数重载、模板和虚函数等概念来实现。
模板是根据类型的参数来产生函数和类的机制,有时模板也称为“参数化的类型”。
程序设计是指设计、编制、调试程序的方法和过程。有结构化程序设计和非结构化程序设计之分。
结构化程序设计方法主要使用顺序、选择、循环三种基本结构,形成具有复杂层次的结构化程序,此外,该方法要求严格控制GOTO语句的使用。
结构化程序设计方法的主要特征:采用“自顶向下,逐步求精”的设计思想。自顶向下是指从问题的总体目标开始,逐步求精是指层层分解和细化。“独立功能,单出、入口”的模块仅用三种(顺序、分支、循环)基本控制结构的编码原则。
面向对象的程序设计方法是以“对象”为中心进行分析和设计的,使这些对象形成解决目标问题的基本构建,即解决“做什么”到“怎么做”的问题。其解决过程从总体上来讲是采用自底向上的方法,先将问题空间划分为一系列对象的集合,再将对象集合进行分类抽象,一些具有相同属性行为的对象被抽象为一个类,类还可以抽象分为子类、超类,采用继承来建立这些类之间的联系,形成结构层次。
采用面向对象程序设计方法(即OOP)来进行程序设计,其本质上就是不断设计新的类和创建对象的过程。
常量:const常量、宏常量 const float pi=3.14159265、#define PI 3.14159265
变量的声明形式:[ <存储类> ] <类型名或类型定义> <变量名表>;
Auto:属于一次性存储,其存储空间可被若干变量多次覆盖使用
Register:存储在通用寄存器中
Extern:在所有函数和程序段中都可以引用
Static:在内存中是以固定地址存放的,在整个程序运行期间都有效
C++语言是大小写敏感的语言
全局变量:其说明语句不在任何一个类定义、函数定义或复合语句(程序块)中的变量。全局变量所占用的空间在内存的数据区,在整个程序运行的整个过程中位置保持不变。
局部变量:其说明在一个类定义、函数定义或复合语句(程序块)中的变量。局部变量所占用的空间在为程序运行时所设置的临时工作区中,以堆栈的形式允许反复占用和释放。
C++的数据类型包括基本数据类型和构造数据类型(复合数据类型)两类。
C++语言的基本数据类型:整型int、字符型char、浮点型float、布尔型bool
基本类型修饰符:signed、unsigned、long、short。
隐式类型转换就是系统默认的,不需要加以声明就可以进行转换。
显示转换时用户手动指出需要转换的类型,显示转换意味着编译器能够找到一个转换方式,但是它不保证这个转换是安全的,而是需要程序员额外指出。
C++中显式类型转换提供了四种不同的操作符:static_case、dynamic_cast、reinterpret_cast。
C++ 的显式转换通过区分各种转换情况来增加安全性,通过const_cast来取消const、volatile之类的修饰,通过static_cast来做相关类型转换,通过reinterpret_cast来做低级的转换等。
在编程时,常量和变量必须遵循“先声明,后使用”的原则
C++语言中,运算符是表示实现某种运算的符号,表达式是运算符和操作数的集合。
::作用域运算符
new动态分配内存单元运算符
delete删除动态分配的内存单元运算符
*和--->*成员指针选择运算符
程序控制结构即程序设计用到的结构,即流程控制结构。
C++语言结构化程序设计的4中结构:
顺序结构
选择结构
循环结构
转向结构
使用cin 和cout必须加入头文件<iostream.h>,即在程序代码的开始部分使用预处理命令#include<iostream.h>,否则不能通过系统编程
格式输出dec也表示十进制输出,通常省略,格式输出符号oct表示为八进制输出,hex表示十六进制输出
凡是在程序中使用了格式控制符,诸如以上的控制进制输出,控制输出的宽度,精度等,在预编译时都需要必须包含头文件iomanip.h,即在头文件处加上语句#include<iomanip.h>
setw函数用来控制设定的宽度 cout<<setw(10)<<a<<endl
setprecision函数控制输出的字符的有效位数 cout<<setprecision(3)<<a<<endl
在使用switch...case语句时,读者一定要注意使用break语句,否则将因无法跳转分支不能继续进行下去,从而导致输出错误
在多重循环中,循环嵌套的执行顺序是先执行最里层的循环语句,以次往外执行,最后执行最外层的循环。
常用的转向语句:break,continue,return,goto。
在c++中,函数是一个能完成某一独立功能子程序,或者说是程序模块。
c++不允许函数的定义嵌套,即在函数定义中再定义一个函数是非法的
在c++程序中调用函数之前,首先要对函数进行定义。
在函数的参数的传递中,实际参数必须与形式参数的个数相同,数据类型相同,而且其对应顺序必须一一对应。
Int main(int argc,char *argv[]) 整形参数argc表示命令中字符的个数,指针数组argv[]指向命令行总的各个字符。
argv[0]存储的是该程序的当前路径,其他存储的是各个字符串。argc存储字符串的个数
c++有两种不同的函数,库函数和自定义函数。
传值调用即其参数是按值传递的方式进行的。
全局变量不属于任何一个函数,可被作用域内的所有的函数直接调用,其作用域从外部变量的定义位置开始,到本文件结束为止。
函数重载是指同一个函数名可以对应多个函数的实现。
函数重载又称为函数的多态性,是指同一个函数名对应着多个不同的函数
内联函数也称为内嵌函数,当一个函数的定义或声明前加上关键字inline则就把该函数定义为内联函数,它主要用于解决程序的运行效率
在使用#include指令的时候,对系统文件,使用#include<>的形式较好,而对用户自定义文件,则使用#include""的形式速度较快
数组是由一些具有相同数据类型元素组成的集合,在内存中占用一组连续的存储单元
void *p2=p1;//定义void指针
int *p3=(int *)p2; //强制类型转换
const int *p4; //A pointer to a pointer constant指向常量的指针
int * const p5=&a; //A pointer constant 指针常量
const int * const p6=&a;//A pointer to a constant pointer constant 指向常量的指针常量
数组指针是一个指向一维数组的指针变量。数据类型 (*指针名) [常量表达式] int (*p)[5]
指针数组就是其元素为指针的数组 数据类型 *指针数组名[常量表达式] int *p1[2]
当一个函数的返回值是指针类型时,这个函数就是指针型函数 数据类型 *函数名(参数表)
函数指针就是指向函数的指针,数据类型 *函数
一般来说,结构体作为函数参数使用的是引用传递
结构体变量中的成员各自占有自己的存储空间,而共用体变量中的所有成员占有同一存储空间
Union 共用体标识符
{
成员变量列表;
. .......
};
Enu 枚举标识符{常量列表};
枚举常量值不能出现重复
如果在给定枚举常量的时候不指定其对应的整形常量值,系统将自动为每一个每句常两设定对应的整形数量值
C++中引入类型重定义语句typedef,可以为数据类型定义新的类型名称。
Typedef 类型名称 类型标识符 typedef double LENGTH;
type struct
{
double x;
double y;
double y;
}Point;
Point opingt;
Typedef int INT_ARRAY_10 [10];
Typedef int INT_ARRAY_20 [20];
INT_ARRAY_10 a,b,c,d;
INT_ARRAY_20 e;
#define AREA double和typedef double AREA可以达到相同的效果。但是其实质是不同的,#define 为预编译处理命令,主要定义常量,此常量可以为任何的字符及其组合,在编译之前将此常量出现的所有位置,用其代表的字符或字符组合无条件的替换,然后进行编译。
所谓位域就是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数,每个域有一个域名,允许在程序中按域名进行操作,这样就可以把几个不同的对象用一个字节的二进制位来表示,位域的定义和位域变量的说明与结构定义类似。
Strut 位域结构名
{
位域列表;
};
其中,位域列表的形式如下:
类型说明符 位域名:位域长度
Struct abc
{
Int a:8;
Int b:2;
Int c:6;
};