首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

c++基础(反思)

作者:  时间: 2010-12-01

    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

基本类型修饰符:signedunsignedlongshort

隐式类型转换就是系统默认的,不需要加以声明就可以进行转换。

显示转换时用户手动指出需要转换的类型,显示转换意味着编译器能够找到一个转换方式,但是它不保证这个转换是安全的,而是需要程序员额外指出。

C++中显式类型转换提供了四种不同的操作符:static_casedynamic_castreinterpret_cast

C++ 的显式转换通过区分各种转换情况来增加安全性,通过const_cast来取消constvolatile之类的修饰,通过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语句,否则将因无法跳转分支不能继续进行下去,从而导致输出错误

在多重循环中,循环嵌套的执行顺序是先执行最里层的循环语句,以次往外执行,最后执行最外层的循环。

常用的转向语句:breakcontinuereturngoto

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 doubletypedef double AREA可以达到相同的效果。但是其实质是不同的,#define 为预编译处理命令,主要定义常量,此常量可以为任何的字符及其组合,在编译之前将此常量出现的所有位置,用其代表的字符或字符组合无条件的替换,然后进行编译。

所谓位域就是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数,每个域有一个域名,允许在程序中按域名进行操作,这样就可以把几个不同的对象用一个字节的二进制位来表示,位域的定义和位域变量的说明与结构定义类似。

Strut 位域结构名

{

位域列表;

}

其中,位域列表的形式如下:

类型说明符 位域名:位域长度

Struct abc

{

    Int a:8;

    Int b:2;

    Int c:6;

};