第三讲:c++初步

来源:互联网 发布:阿里云国际站网址 编辑:程序博客网 时间:2024/06/02 04:15

1. 变量的引用
- 引用:变量的引用就是变量的别名.建立引用就是为一个变量另取一个名字.以便在需要的时间接地引用该变量.

2. 引用示里

int &b=a;   //a的值变化,b的值一定发生变化

3. 如何使用

int a; int &b=a;  //声明一个整型变量的引用变量,并且被初始化为a;
  • 此处&是引用声明符,对于一个变量声明一个引用,并不另外开辟内存空间,b和a代表同一个变量单元.
  • 引用不是独立的变量,编译系统不给它分配存储单元,因此建立引用只有声明,没有定义,只是声明和某一个变量的关系.
  • 声明了一个变量的引用后,在本函数执行期间,该引用一直与代表的变量相联系,不再做为另一个变量的别名.
  • 引用不是独立的数据类型,它必须与某一中类型的数据相联系.> int &x; //错误

4. 将引用作为函数参数
- 背景:c++之所以增加"引用",主要是利用它作为函数参数,以弥补函数传递参数的不方便的遗憾.也降低了编程难度.
- 将变量名作为实参:传给形参的是变量的值,传递是单向的,函数运行时,形参发生变化,并不回传给实参.因为形参和实参不是同一个存储单元.
- 传递变量的指针:传给形参的是变量的地址,形参得到一个变量的地址,即形参指针变量指向实参变量单元.函数中形参发生改变,实际上是改变实参.这种方法实际上依然是值传递,想要指针变量传递地址值,.然后通过指针变量访问有关变量,间接的回传了改变的变量.
“`cpp

swap( &i, &j);  //实参地址
void swap(int *p1, int *p2); //形参函数
“`

  • 传递变量的别名:将变量的引用作为函数形参,弥补了上面两种方法的不足.
    cpp
    swap( i, j );
    void swap( int &a, int &b);

     swap函数形参&a, &b是指定整型变量的引用作为形参,但引用谁还没定,而mian函数将i, j的名调用swap,就是将i, j的名字传给引用,这样a就是i的别名,b就是j的别名.

理解引用
物理实现上来理解,引用是一个隐形指针,即引用值是引自所指向的实体.这就是引用的真意,高级编程面向应用多用引用,低级编程面向机器多用指针.

对引用的说明
- 不能建立void类型的引用,因为任何实际存在的变量都属于非void类型.
- 不能对数组名进行引用,因为数组名是首地址本身不占有存储空间.
- 可以建立指针变量的引用
“`
int i=5;
int *p=&i; //定义指针变量p,指向i
int *&t = p; //t是指向整型变量的指针变量的引用,初始化为p

“`

  • 可以将引用的地址赋给指针.此时,指针指向原来变量.

    int a=3;int &b=a;int *p=&b; //指针p指向变量a的引用b,相当于指向于a
  • 不能定义指向引用类型的指针变量;

    int & *p = &a;  //错误 
  • 可以用常变量或表达式对引用初始化,但必须用const限定

    const int &c = 3; //合法

内联函数(inline function)

  • 引入原因:目的是为了解决程序中函数调用的效率问题.有些函数代码很短,却有高使用频率,造成处理现场的开销剧增.这时将函数体嵌入函数调用处,则可避免每次调用函数的开销,大大提高效率.
  • 内联函数的定义:在声明一个函数时,加上限定词inline,该函数就成为内联函数,编译时,系统将调用此函数的地方用函数的源代码替换,即以空间代价换取时间.

    #include <iostream.h>inline int power(int x)  //定义一个内联函数{ return x*x;}int main(){ cout<<power(2)<<endl;    //编译系统展开为x=2; x*x cout<<power(1+2)<<endl;    //编译系统展开为x=1+2; x*x return 0;}
  • 内联函数的限制:

    • 函数内不能含有循环结构或者switch结构
    • 不能含有任何静态数据及数组声明
    • 不能是递归函数.

作用域运算符

  • 标识符只能在说明它或定义它的范围内是可见的,而在该范围之外是不可见的.
  • 每一个变量都是有自己的有效范围的,只能在变量的作用域内使用该变量.不能直接使用其他作用域中的变量.如果要使用其他作用域中的同名变量,必须使用"作用域运算符",即:”::”
#include <iostream.h>float a=1.5;int main(){    int a=5;    cout<<a<<endl;    //输出作用域main内的局部变量a的值    cout<<::a<<endl;   //输出作用域为全局的全局变量a的值    return 0;} 

注:不能用作用域运算符"::"访问函数中的局部变量.


局部变量和全局变量

  1. 局部变量:指作用域在函数级的变量.
  2. 全局变量:指作用于在程序级和文件级的变量
  3. 局部优先原则.

字符串变量

  • c++提供了字符串类,利用此类可以定义字符串对象.但是文件开头必须包含string库(不能使string.h,必须用using namespace std;)
  • 字符串定义
    • string s1; //定义字符串变量s1
    • string s2=”China”;   //定义字符串变量s2并初始化
  • 字符串赋值
    • s1=”Hello”; s2=s1;
    • s3=s1+s2; //字符串连接-
  • 字符串变量的输入输出
    • string c1; cin>>c1; cout<

动态分配内存new/回收内存delete

  • 分配内存空间:new类型
  • 回收内存空间:delete指针变量
  • student *p;
  • p = new student;
  • delete p;

c++文件包含

  • 文件包含:是指一个程序将另一个指定文件的内容包含起来,即将另一个程序文件在编译时嵌入到本文件中.格式如下
  • #include <文件名> | #include “文件名”
    • ”文件名”是指被嵌入的c++源程序文件的文件名,必须双引号或尖括号括起来.
    • 如果使用尖括号,预处理程序在系统规定的目录(通常在系统的include子目录)中查找该文件
    • 如果使用双引号,预处理程序首先在当前目录中查找嵌入文件,如果找不到再去由操作系统的path命令设置的各个目录中查找,如果仍然没有找到,最后再到系统规定的目录中查找.
  • 原来的源程序文件和用文件包含命令嵌入的源程序文件在逻辑上被看成是同一个文件.


  • 面向对象的软件工程是面向对象方法在软件工程领域的全面应用。它包括:
    面向对象的分析(OOA)
    面向对象的设计(OOD)
    面向对象的编程(OOP)
    面向对象的测试(OOT)
    面向对象的软件维护(OOSM)