编程学习(四)----c++总体概览(一)

来源:互联网 发布:手机mp3变速软件 编辑:程序博客网 时间:2024/05/01 04:20

在前面写了几篇文章只是简单的了解认识了一下c++,知道怎样去读一段程序代码。这一篇文章我们来站在一个总体的角度看看c++程序设计都牵扯到那些方面的东西。

一、内置的数组数据类型

C++除了对基本数据类型提供支持,此外还支持布尔类型以及用来存放字符集中单个元素的字符类型。另外标准库还支持基本类抽象的组合,例如字符串、复数。在内置数据类型与标准库类的类型之间是复合类型(compound type) 特别是指针和数组类型。

数组是一种顺序容器,它包含单一类型的数据元素。例如:

int fibon[9]={0,1,1,2,3,5,8,13,21}要访问数组的元素可以采用数组的下标操作符。(数组的元素索引是从0开始的,即0表示数组的第一位元素)。比如我们要访问上面数组的第一位元素可以这样写:fibon[0];第二位元素:fibon[1]......在编写程序的时候要注意“一位偏移错误”。

如果要遍历一个数组的元素我们通常采用循环的操作。最常用的就是for循环。例如:

int main()

{

int ia[ 10 ];

int index;

for ( index = 0; index < 10; ++index )

// ia[0] = 0, ia[1] = 1, 等等

ia[ index ] = index;

for ( index = 9; index >= 0; --index )

cout << ia[ index ] << " ";

cout << endl;

}

c++中不能用赋值操作符把一个数组拷贝到另一个数组。例如:

int array0[ 10 ], array1[ 10 ];

// 错误不能直接把一个数组赋值给另一个数组

array0 = array1;

如果希望把一个数组赋值给另外一个则必须自己写程序按顺序拷贝每个元素

for ( int index = 0; index < 10; ++index )

array0[ index ] = array1[ index ];

二、动态内存分配和指针

c++程序中内存分配有两种,一种是静态分配(程序执行之前编译器处理源代码的时候分配),另一种是动态分配(在程序执行的时候有库函数分配)。到目前为止,所有的内存都是静态分配的,例如:int a=1024;就是告诉编译器要在内存中分配足够的存储区域来存储这个整型数值。该存储区与名字a相关联,然后用1024来初始化这块存储区。而以上这些工作都是在程序执行之前就已经确定好的。

有两个值是与对象a相关联的,一个是对象a的赋值1024,另一个就是春初对象a这块存储区的地址。当然,这两个值都可以被访问,当写出代码:int a2=a1+1的时候就表示访问a1包含的值加上1,然后用加上1的值初始化a2,这时a2的值就是1025。那么如何访问地址呢?这时候就要用到指针(用来存放内存地址的值)。例如可以用int *point;来声明一个可以存放内存地址的指针。 

c++中提供了一个取地址操作符——&,如果把它用在一个对象上的时候,返回的是这个对象的地址值。上文中为了将a的地址值赋给point,可以这样写:int*point

point=&a

为了访问point所指向的实际对象,必须先用解引用操作符*来解除point的引用。例如下例就是通过point间接的给a加上1

*point=*point+1

它等同于:a=a+1;在本例中通过指针来操作a没有多大的意义,效率低而且容易出错,其实指针的作用是用来操作和管理动态分配的内存。

三、基于对象的设计与面向对象的设计

这里谈到了针对对象的设计就要引入类机制。类的格式如下:

class classname类名{

public:

//公有操作集合

private:

//私有操作集合

protected:

//更为严格的一种成员保护操作

}

类由类头和类体构成。类头用作类的声明,类体包含类成员的定义以及访问标签。例如:

class point{

public

int x;

int y;

}

通过使用两个成员访问操作符(member access operator) 中的一个我们可以调用一个有名字的成员函数,如min() 。这两个操作符为:用于类对象的点操作符(.) 以及用于类对象指针的箭头操作打(->)。 例如为了在数组myArray 类对象中找到最小值我们可以这样写

// myArray 数组中的最小元素来初始化min_val

int min_val = myArray.min();

为了在动态分配的IntArray 对象中查找最大值我们可以这样写

int max_val = pArray->max();

在针对对象的设计中还会牵扯到很多的知识点,比如:构造函数、函数的重载、友元函数、析构函数、内联函数等等,这些具体的概念与实例就在以后与大家共同讨论,这里只是简单的先提到一下。根据自己的学习心得来说,这些概念都没有必要死记硬背,而是要通过实例来深入认识以达到熟练的地步。(纯属个人看法,其实每个人都有自己的学习方法,因人而异,各不相同。)此外,关于继承、多态、虚函数等在后面也会慢慢结合实例来剖析。具体的概念就不在这里赘述了,可以查阅相关资料或者是度娘来解决!

此外泛型设计、基于异常的设计、用其他名字来命名数组、标准数组(向量)将在下一篇文章里面继续简单的讨论!

原创粉丝点击