第 2 章 C++ 基础

30
第2第 C++ 第第

description

第 2 章 C++ 基础. 2.1 C++ 的产生和特点.   2.1.1 C++ 的产生 C++ 是美国贝尔实验室于 1980 年开发出来的一种过程性与面向对象性结合的程序设计语言。最初他把这种新的语言叫做“含类的 C”, 到 1983 年才取名为 C++ 。. 2.1.2 C++ 的特点 (1) C++ 保持与 C 兼容。 (2) 用 C++ 编写的程序可读性更好 , 代码结构更为合理 , 可直接地在程序中映射问题空间的结构。 (3) 生成代码的质量高 , 运行效率仅比汇编语言代码段慢 10% 到 20% 。 - PowerPoint PPT Presentation

Transcript of 第 2 章 C++ 基础

Page 1: 第 2 章     C++ 基础

第 2 章 C++ 基础

Page 2: 第 2 章     C++ 基础

2.1 C++2.1 C++ 的产生和特点的产生和特点

  2.1.1 C++ 的产生 C++ 是美国贝尔实验室于 1980 年开发出

来的一种过程性与面向对象性结合的程序设计语言。最初他把这种新的语言叫做“含类的C”, 到 1983 年才取名为 C++ 。

Page 3: 第 2 章     C++ 基础

2.1.2 C++ 的特点 (1) C++ 保持与 C 兼容。 (2) 用 C++ 编写的程序可读性更好 , 代码结构更

为合理 , 可直接地在程序中映射问题空间的结构。 (3) 生成代码的质量高 , 运行效率仅比汇编语言

代码段慢 10% 到 20% 。 (4) 从开发时间、费用到形成的软件的可重用性、

可扩充性、可维护性和可靠性等方面有了很大的提高 , 使得大中型的程序开发项目变得容易的多。

(5) 支持面向对象的机制 , 可方便地构造出模拟现实问题的实体和操作。

Page 4: 第 2 章     C++ 基础

2.2 C++2.2 C++ 程序的结构特性程序的结构特性 

2.2.1 一个简单的 C++ 示例程序

Page 5: 第 2 章     C++ 基础

例 2.1 两数相加 // sum.cpp #include<iostream.h> int add(int a, int b); // 函数原型说明 int main() // 主函数 { int x, y, sum; // 定义三个整型变量 cout << Enter two numbers: <<\n; // 界面 : 提示用户输入两个数 cin>>x; // 从键盘输入变量 x 的值 cin>>y; // 从键盘输入变量 y 的值 sum=add(x, y); // 调用函数 add, 将得到的值赋给变量 sum cout<<The sum is:<<sum<<\n; // 输出两个数的和 sum 的值 return 0} int add(int a,int b) // 定义 add 函数 , 函数值为整型 { int c; // 定义一个整型变量 c=a+b; // 计算两个数的和 return c; // 将 c 的值返回 , 通过 add 带回调用处 }

Page 6: 第 2 章     C++ 基础

2.2.2 C++2.2.2 C++ 程序的结构特性程序的结构特性

类的声明部分 面向对象程序 类的使用部分

Page 7: 第 2 章     C++ 基础

例 2.2 典型的 C++ 程序结构#include<iostream.h>// 类的声明部分class A{ int x,y,z; // 类 A 的数据成员声明 … fun(){ … } // 类 A 的成员函数声明 …};// 类的使用部分 int main() { A a; // 创建一个类 A 的对象 a … a.fun(); // 给对象 a 发消息 , 调用成员函数 fun() return 0;} 

Page 8: 第 2 章     C++ 基础

2.2.3 C++2.2.3 C++ 程序的编辑、编译和运行程序的编辑、编译和运行 C 源程序文件扩展名为 .C, 而 C++ 源程序文

件扩展名为 .CPP 。 在 DOS 下 ,C++ 程序的编辑、编译及运行

方法和过程与 C 语言基本一样 , 如 Turbo C++或 Borland C++ 都有带 C 和 C++ 两种编辑器 ,当源程序文件扩展名为 .C 时 , 启动 C 编译器 , 当源程序文件扩展名为 .CPP 时启动 C++ 编译器。

在 Windos 下 , 我们常用 Visual C++ 开发环境 , 来编辑、编译和运行 C++ 程序。

Page 9: 第 2 章     C++ 基础

2.3 C++2.3 C++ 在非面向对象方面的扩在非面向对象方面的扩充充

2.3.1 注释与续行 以下两条语句是等价的 :

x=y+z; /* This is a comment */

x=y+z; //This is a comment

Page 10: 第 2 章     C++ 基础

2.3.2 2.3.2 输入输出流输入输出流 例 2.3 一个完整的 C++ 程序。 #incluade <iostream.h> int main() { char name[20]; cout << " Hello,your name: " ; cin >>name; cout<<name; return 0; }

Page 11: 第 2 章     C++ 基础

2.3.3 2.3.3 灵活的变量说明灵活的变量说明 float fun(int x,int y) // 对形参直接进行说明{

for (int i=0;i<10;i++) // 对循环变量 i 进行说明 {

int sum=0; // 循环体内也可对变量 sum 进行说明 sum=sum+i;

cout<<"sum="<<sum;

}

int z=0; // 使用变量 z 时才说明它 z=x+y;

}

Page 12: 第 2 章     C++ 基础

2.3.4 2.3.4 结构、联合和枚举名结构、联合和枚举名 例如 :

enum boole{FALSE,TRUE};

struct string{

char * str;

int length;

};

union number{

int i;

float f;

};

C++ 在中 , 定义变量时 , 可以说明为 :

boole done;

string str;

number x;

Page 13: 第 2 章     C++ 基础

2.3.5 2.3.5 函数原型函数原型

例 2.5 函数原型的说明。 #include <iostream.h>

void write(char *s); // 函数原型的说明

void main()

{ write( " Hello,world !" );}

void write(char *s)

{ cont<<s; }

Page 14: 第 2 章     C++ 基础

2.3.6 const2.3.6 const 修饰符修饰符 例 2.6 #define 的不安全性 #include<iostream.h> main() { int a=1; #define T1 a+a #define T2 T1-T1 cout <<"T2 is "<<T2<<endl; return 0; }

Page 15: 第 2 章     C++ 基础

例 2.7 用 const 取代 #define 。 #include<iostream.h> int main()

{ int a=1; const T1=a+a; const T2=T1-T1; cout <<"T2 is"<<T2<<endl; return 0; }

输出 :T2 is 0

Page 16: 第 2 章     C++ 基础

(1) 指向常量的指针是指 : 一个指向常量的指针变量。例如 :

const char* pc=" abcd" ; // 声明指向常量的指针 (2) 常指针是指 : 把指针本身 , 而不是它指向的对象

声明为常量。例如 :

char* const pc=" abcd" ; // 常指针 (3) 指向常量的常指针是指 : 这个指针本身不能改变 ,它所指向的值也不能改变。要声明一个指向常量的常指针 ,二者都要声明为 const 。例如 :

const char* const pc=" abcd" ;//指向常量的常指针

Page 17: 第 2 章     C++ 基础

2.3.7 void2.3.7 void 型指针型指针 例 2.8 void 型指针的使用。#include<iostream.h> main(){ void* pc; int i=456;char c=a;pc=&i;cout<<*(int* )pc<<endl;pc=&c;cout<<*(char*)pc<<endl;return 0;}

Page 18: 第 2 章     C++ 基础

2.3.8 2.3.8 内联函数内联函数 例 2.9 内联函数的使用

#include <iostream.h>

inline double circle(double r) // 内联函数{ return 3.1416*r*r; }

int main()

{

for (int i=1;i<=3;i++)

cout<<"r="<<i<<" area= "<<circle(i)<<endl;

return 0;

}

Page 19: 第 2 章     C++ 基础

2.3.9 2.3.9 带有缺省参数值的函数带有缺省参数值的函数

例如有一函数原型说明为 :

int init(int x=5,int y=10);

则 x 与 y 的缺省值分别为 5 与 10 。

以下的函数调用都是允许的 :

init(100,80); // x=100,y=80

init(25); // x=25,y=10

init(); // x=5,y=10

Page 20: 第 2 章     C++ 基础

2.3.10 2.3.10 函数重载函数重载

在 C++ 中 , 只要函数参数的类型不同 , 或者参数的个数不同 , 或者二者兼而有之 , 两个或者两个以上的函数可以使用相同的函数名。

Page 21: 第 2 章     C++ 基础

例 2.13 参数类型不同的重载函数#include<iostream.h>int cube(int i){ return i*i*i; }float cube(float f){ return f*f*f; }double cube(double d){ return d*d*d;}int main(){ int i=12; float f=3.4; double d=5.67; cout<<i<<*<<i<<*<<i<<=<<cube(i)<<endl; cout<<f<<*<<f<<*<<f<<=<<cube(f)<<endl; cout<<d<<*<<d<<*<<d<<=<<cube(d)<<endl; return 0; }

Page 22: 第 2 章     C++ 基础

2.3.11 作用域标识符∷ 例 2.16 使用作用域标识符的情况。

#include<iostream.h>int avar;main()

{ int avar;

avar=25; // 局部变量 avar ::avar=10; // 全局变量 avar

cout<<"local avar ="<<avar<<endl; cout<<"global avar ="<<::avar<<endl; return 0;}

程序运行结果如下 : local avar=25 global avar=10

Page 23: 第 2 章     C++ 基础

2.3.12 2.3.12 无名联合无名联合

union

{

int i;

float f;

}

在此无名联合中 , 声明了变量 i 和 f具有相同的存储地址。

Page 24: 第 2 章     C++ 基础

2.3.13 2.3.13 强制类型转换强制类型转换 在 C 中如果要把一个整数 (int) 转换为浮

点数 (float),要求使用如下的格式 : int i=10; float x=(float)i; C++ 支持这样的格式 , 但上面的语句可

改写成 : int i=10; float x=float(i);

Page 25: 第 2 章     C++ 基础

2.3.14 new2.3.14 new 和和 deletedelete

运算符 new 用于内存分配的最基本的语法形式为 :

指针变量 = new 类型名 ;

运算符 delete 用于释放 new 分配的存储空间。其基本的语法形式为 :

delete 指针变量 ;

Page 26: 第 2 章     C++ 基础

例 2.17 操作符 new 和 delete 的使用。 #include <iostream.h>

main()

{

int *p; // 声明一个整型指针变量 p

p=new int; // 动态分配一个存放 int 型数据的内存 空间 , 并将首地址赋给 p

*p=10;

cout<<*p;

delete p; // 释放指针变量 p 指向的内存空间 return 0;

}

Page 27: 第 2 章     C++ 基础

2.3.15 2.3.15 引用引用 1. 引用的概念 引用通常被认为是某个变量的别名 , 声

明一个引用的格式如下 : 数据类型 & 引用名 = 已定义的变量名 ; 例如 : int i=5; int& j=i; 这里 ,j 是一个整数类型的引用 , 用整型

变量 i 对它进行初始化 , 这时 j 就可看作是变量 i 的别名 。

Page 28: 第 2 章     C++ 基础

例例 2.22 2.22 引用的使用。引用的使用。#include <iostream.h>

void main()

{

int i;

int &j=i;

i=30;

cout<<"i="<<i<<"j="<<j<<"\n";

j=80;

cout<<"i="<<i<<"j="<<j<<"\n";

cout<<"Address of i"<<&i<<"\n";

cout <<"Address of j"<<&j<<"\n";

}

Page 29: 第 2 章     C++ 基础

2. 2. 引用作函数参数引用作函数参数 例 2.25 采用“引用参数”传递函数参数#include <iostream.h>void swap(int& m,int& n){ int temp; temp=m; m=n; n=temp;}main(){ int a=5,b=10; cout<<"a="<<a<<" b="<<b<<endl; swap(a,b); cout<<"a="<<a<<" b="<<b<<endl; return 0;}

Page 30: 第 2 章     C++ 基础

3. 3. 用引用返回值用引用返回值 例 2.27 用引用返回函数的值。#include<iostream.h> int A[10];int& array(int i);void main(){ int i,number; A[0]=0; A[1]=1; cin>>number; for (i=2;i<number;i++) { array(i)=array(i-2)+array(i-1);cout<<"array("<<i<<")="<<array(i)<<endl; } } int& array(int i) { return A[i]; }