C++在非面向对象方面的一些特性(基本)

来源:互联网 发布:怎么设置农村淘宝收货 编辑:程序博客网 时间:2024/05/24 04:01
一、新的I/O流1 使用cin和cout分别实现输入输出操作,程序中必须嵌入头文件iostream.h

2在C++中可以使用endl来代替“\n”实现输出换行

二、const修饰符在C中,习惯使用#define来定义变量,
    #define PI 3.14159    #define  R  a+b     printf(“%f\n”,PI*R*R);
C++提供一种更灵活、更安全的方式来定义常亮,即const修饰   符。一般的语法格式:const 类型名 常量标识符=常量表达式;这个常量是类型化的,它有地址,可以用指针指向这个值,但不能修改它(有点类似C);1) 指向常量的指针变量
const int *x;
x是一个指针,它指向一个int类型,这个int数据是常量,可以不对其进行初始化,x可以指向任何东西,但是它所指向的东西是不能被改变的。2) 常指针
int d=1;int * const x=&d;

现在指针本身就是const指针,所以要必须对其进行初始化,并且在指针寿命期间这个指向是不能被改变的,其指向位置不能变,指向位置的数值是可以变得。
3)指向常量的常指针

const char * const name="chen"

指针自身的值与指向位置的值均不可改变

三、函数原型声明

除主函数外:
C语言建议为程序中的每一个函数建立原型
C++要求必须为每一个函数建立原型
语法格式:
1 函数类型 函数名(参数表);
2 函数类型 函数名(类型表);
说明:
1)如果一个函数没有返回值,则必须在函数原型中使用void类型符。
2)如果函数原型中未注明参数,C++假定该函数的参数表为空(void)。如f();和f(void);是等价的。
3) C++局部变量的使用
一般认为,在大函数中,在最靠近使用变量的位置定义变量比较合理,在比较短的函数中,把局部变量集中在函数开始处说明比较好。

四,函数重载

在传统的C语言中,函数名必须是唯一的,也就是说不允许出现同名的函数。但是在C++中可以重载函数,即只要函数参数的类型不同,或者参数的个数不同,或者二者兼而有之,两个或两个以上的函数可以使用相同的函数名。当两个或者两个以上的函数共用一个函数名时,称为函数的重载。

重载函数应该在参数个数或参数类型上有所不同,否则编译程序将无法确定调用哪一个重载版本,即使返回类型不同也不能区分。例如:

    int mul(int x,int y);    double mul(int x,int y);

一般而言,重载函数应执行相同的功能,例如ads()函数一般用来返回一个数的绝对值,如果重载abs()函数,让它返回一个数的平方根,则是不可取的。

五、带有缺省参数的函数C++在说明函数原型时,可为一个或多个参数指定缺省参数值,以后调用此函数,若省略其中某一参数,C++自动的以缺省值作为相应参数的值。例如函数原型说明为:
int special(int x=5;float y=5.3);

当在进行函数调用时,可以有以下几种形式:
1 sepcial(100,79.8); //x=100,y=79.8
2 special(25);//x=25,y=79.8;
3special();//x=5,y=79.8;
说明:
1)、缺省参数都必须出现在不取缺省值得参数右边,

int fun(int i,int j=5,int k);//wrong
2)在函数调用时,若某个参数省略,则其后的参数皆应省略而采用缺省值。

六、引用引用就是给变量一个别名,是指针运算更加方便1引用的定义类型名 &别名=变量名或别名;如`int a=5;int &b=a;`此时a 与b的地位是一样的。所在的空间也一样说明:    1)定义的时候必须初始化,    2)初始化可以为别的别名
    int a;    int &b=a;    int &c=b;
3)引用不可重新赋新值,4) 引用不同于普通变量,以下都非法:    int &b[3];//不能建立引用数组    int &*p;//不能建立指向引用的指针    int &&r;//不能建立引用的引用5)地址运算符仍保持原义,如“
     int num=50;     int &ref=num;     int *p=&ref;//int *p=#相同

2引用用做函数参数
引用用作函数参数在函数里面对引用进行操作就相当于直接对于实参的操作,即通过引用参数产生的效果通按地址传递是一样的,但其语法更清楚简单,C++中主张引用传递取代地址传递的方法,因为引用语法容易且不易出错。

七 内置函数1 在函数说明前加关键字"inline",则该函数就被声明为内置函数。2 每当程序中出现对该函数的调用时候,c++编译器使用函数体内的代码替代函数调用表达式,这样能加快代码的执行,减少调用开销。3使用内置函数替代宏定义,可以消除宏定义的不安全性。内置函数具有宏定义的所有优点而没有缺点
    #define power(x) x*x    inline power(int x)    {        return x*x;    }    宏定义中调用power(1+1),会变为 1+1*1+1,输出为3,    内置函数调用power(1+1),会变为 (1+1*(1+1),输出为4
八 全局变量作用于运算符"::"    通常情况下,如果有两个同名变量,一个是全局的,另一个是局部的,那么局部变量在其作用域内具有较高的优先权。    如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上"::",此时调用的就是全局变量,"::"称为作用域运算符。九 字符串变量C++中可用string类型定义字符串变量,用以代替字符数组char [n],如:
    string word="then";//定义并初始化变量word    word[2]="a";
注意:在使用string类型时,必须包含头文件#include <string>,且在定义string类型时不需定义长度,而定义字符数组char时必须注意长度。字符串相加结果两个字符串的串联:
    string str1="c++";    string str2="你好";    str1=str1+str2;//str1="C++你好"
十、强制类型转换在C语言中只用(int )x的形式,但是在C++中还允许另一种更为方便的函数调用形式int(x)。这两种方式C++都可以接受但是推荐后一种。十一、new和delete运算符在C语言中动态内存分配是靠malloc()和free()两个函数完成。在C++中动态内存分配有更好更简单的方法:(1)分配内存:p=new 数据类型;(2)释放内存:delete p;说明:1 new在为简单变量分配内存的同时进行初始化。如`int *p;p=new int(90);`2 使用new可以为数组动态分配内存
*p=new int[10];
3释放动态分配的数组内存时,使用如下格式
    delete []p;
4使用new动态分配内存时,如果没有足够的内存,将返回空指针(NULL).
1 0
原创粉丝点击