面向对象设计与C++课件第1章 C++对C性能的扩充

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<
7
3. 数据类型
枚举类型
一般形式:enum 枚举类型名{枚举列}[枚举变量表]
C++中定义枚举变量时,不必在枚举名前加标识符enum
共用体类型
同结构体类型,联合类型一旦定义,就可以直接使用联合名定义 变量,而不用在联合体名前加标识符union。
结构体类型:
C++语言,结构体一旦定义,则可以直接使用该结构体名定义变量,不需 在结构体前加struct标识。如:
内有效。 块内域—块内定义的变量(比局部变量的作用域更小),
块内定义的变量的作用域为从定义点到当前块内有效, 语句块执行完毕,自动释放。
14
例如:
1. int X=1;
//全局变量
2. void Function(int a)
//函数的形参
3. { int b=a; 4. X=b;
//正确 //局部变量
//正确
16. C=X; a=3; b=4;//错误
17.}
15
语句块内变量的应用目的
※ 通过缩小变量的作用域来缩短变量的生存期,充分利 用内存空间,优化内存的使用
void main() {
int X; //局部变量 for(X=1; X<10; X++) { } } //在此时X才被释放
void main() { for(int X=1; X<10; X++) { //块内变量 } //在此时X就被释放 }
int main()
//主函数首部
{ int x,y,sum;
//定义3个整型变量
cout<<"Please input two integers:"<<'\n';
//提示用户由键盘输入两个整数
cin>>x;
//从键盘输入变量x的值
cin>>y;
//从键盘输入变量y的值
sum=x+y;
//将x+y的值赋给整型变量sum
cout <<"local X=" <<X<<endl; //未限定时的符号名为局部 //符号名 cout <<"global X=" <<::X; //采用“::”限定时的符号名为全// 局符号名 }
18
全局作用域限定符的编程规则(1)
✓ 只能将“::”放在具有全局符号名说明的变量名之前,不能放在无全局 符号名说明的局部变量名之前。
12
例如:
1. #include<iostream.h>
2. void main(void)
3. { 4. int x=1;//局部变量
5. {
6.
int y; //块内变量
7.
8.
x=3;y=4;
9. }
10. cout<<"y="<<y<<endl;
11. }
void main(void) {
一个名字空间可以看作一个比程序模块更大的包。
格式:Namespace ModuleName
{ <程序代码>
} 注:一个给定名字空间的所有代码可以位于同一个文件中, 也可以分布在多个文件中,但是在每一个文件中代码都要按照 上述语句格式进行封装。 其作用域有两方面的含义: (1)同一个名字空间作用域内不允许存在同名标识符; (2)不同名字空间作用域内的标识符不能直接调用,需要 添加名字空间的作用域限定运算符。
22
改进:
#include <iostream.h> #define PI 3 //没有类型,不占用存储单元 const int R=2+3;//有类型,有存储单元 int main() {
int a=2; int b=3; cout<<PI*R*R<<endl; return 1; }
23
例:分析如下程序的功能
//字符串比较
if(str1<str2) cout<<"str1小于str2"<<endl;
else cout<<"str1大于等于str2"<<endl;
<
}
10
4. 变量
正确理解C中的变量的定义要求: 一般应该集中定义出,不能在语句块中定义。
程序例: void main()
1. { int x=1;
struct student{xxx}; student stu;
另外,C++中的结构体类型所有的属性和方法都是公有的。
新增类类型
C++中的struct作为特殊的类类型中不仅有属性数据还有成员函
数,但是所有访问属性都是公有。
8
string类型
C语言中我们都是用字符数组来表示字符串的,在C++除了可以 用字符数组表示外,我们还可以用string类型来更方便的表示字符 串,string实质上是C++标准库(stl)中用面向对象方法定义的字符串 类,它并不是C++提供的基本类型。
cout<<"请输入圆的半径值:(负值退出)"<<endl; cin>>r; } return 1; }
24
const定义常量
const 类型 常量名=表达式; 或 类型 const 常量名=表达式; 例如:const double pi=3.14;
int X=1; void main(void) { int X=2;
int Y=3; ::X=10; //正确,因为有同名的全局符号名说明 ::Y=4; //错误,因为无同名的全局符号名说明 } ✓ 全局作用域限定符“::”不仅可以限定变量,也可以用来限定函数
19
名字空间
--解决不同模块相同名字冲突问题。
int a; float f;char c; cin>>a>>f>>c; cout<<"a="<<a<<"f="<<f<<"c="<<c<<endl; return 0; } 注:使用cin与cout必须在程序开头包含iostream头文件!
6
C++输入输出流的优点
✓简单易用,根据操作对象自适应,无需指定 变量的类型; ✓可对自定义的类型进行输入输出; ✓提高了安全性和可扩展性。
#include <iostream>
#include <string> //必须包含此头文件
using namespace std;
void main()
{
string str1;
str1="abcdefg";
string str2=str1; //用一个字符串给另一个赋值

cout<<str1<<endl; //对字符串进行输入输出
系统采用同名覆盖原则决定,输出为2 如果要输出全局变量X的值,怎么办?
17
C++中的全局作用域限定符
作用:它能使程序员访 问在某外部块中所定义 的全局变量,以免被同 名的局部变量所覆盖。
访问规则:有::限定的 同名符号是全局变量, 无::限定的同名符号是 局部变量。
#include <iostream.h> int X=1; void main() { int X=2;
//正确
2. for(int i=0; i<10; i++) //错误
3.
{
4.
int y=2;
5.
}
6. }
11
(1)C++变量定义规则
可以采用“随用随定义”的方式定义出变量,即变量的块内 定义
C++中允许变量在使用之前的任一语句块中定义出来,包括 for循环中
何为块?
块:C++语言把{}括起来的一块区域称为块。 块变量:定义在某个块中的变量。 块作用域:变量定义的由花括号括起来的范围,块变量在其 作用域可见,而在作用域外不可见。
符串进行操作。 #include <iostream>
#include <string> //必须包含此头文件
using namespace std;
void main()
{
string str1="abcd";
string str2="efgh";
cout<<str1+str2<<endl; //字符串连接
#include <iostream.h> const float PI=3.1415926f; int main() {
float r; cout<<"请输入圆的半径值:(负值退出)"<<endl; cin>>r; while(r>=0) {
cout<<"半径为"<<r<<"的圆的面积为:" <<PI*r*r<<","<<"周长为:" <<2*PI*r<<endl;
使用cin的格式:cin>>变量名1[>>变量名2>>…变量名n]
使用cout的格式:cout<<表达1[<<表达式2<<表达式n>>]
5
例如:
#include <iostream.h> int main() {
for(int i=1;i<=3;i++) {
cout<<"count="<<i<<endl; }
cout<<str1[5]<<endl; //操作字符串中的单个字符
str1[5]='k';
cout<<str1<<endl; }
9
string字符串的运算
C语言中对字符串进行运算要用到strcat(),strcpy(),strcmp()等库
函数,C++中的string字符串类,可以直接用+,>,<,=等运算符对字
第1章 C++对C性能的扩充
1
主要内容
1 行注释 2 输入输出 3 数据类型 4 变量
5 函数 6 new及delete 7 引用类型
2
1. 行注释
在C++中,新增了行注释//
//sum.cpp
#include<iostream>
//编译预处理命令
using namespace std; //使用命令空间std
20
例如:
//a.h #include namespace A { 函数f1{}
函数f2{} 变量s; }
若要在A名字空间外,调用f1、f2函数和
变量s,如何表达?
方法1:A::f1();
方法2:#include “A.h” void main() { using namespace A;
f1();//名字空间A中的函数 }
5. Y=X;
//错误
6. }
7. void main() 8. { int Y=2;
//局部变量
9. X=2; 10. Function(X);
//正确
11. for(int i=0;i<10;i++) //块定义的变量
12.{ X=2; 13. int C=0;
//正确//块定义的变量
14.}
15. X=2,Y=3;
16
(2) 作用域运算符与命名空间
C语言中变量命名的要求:
在同一个程序中应该尽可能保持变量名的唯一性,最好不要同名。
#include "iostream.h"
int X=1;
void main() {
相同吗?
?此 时 输 出 的 X 值
是 为 “ 1” 还 是 “2”
int X=2; cout <<X; }
for(int i=1;i<10;i++) {
int z=1; //块内变量 } cout<<"z="<<z; }
13
正确理解C++中的变量的各种作用域
文件域—全局变量(其作用域为从定义点到当前文件结 束有效)。
函数域—局部变量(其作用域为本函数内有效)。 函数原型域—函数的形参,为局部变量,只在该函数体
cout<<"x+y="<<sum<<endl; //输出两个整数的和sum
return 0;
//如程序正常结束,
}
//向操作系统返回一个数值0
<
3
2. 数据的输入和输出
C语言中我们用库函数printf和scanf对基本变量进行输入输 出。如下程序:
#include <stdio.h> void main() {
21
(3)用const关键字定义常变量
在C语言中我们用#define宏命令来定义常量, #define只是在编译时进行字符串替换,运行时系统不为其分配 内存空间。用它有时会出现意想不到的错误。如下所示:
#include <iostream.h> #define PI 3 #define R a+b int main() {
int a; scanf("%d",&a); printf("a=%d\n",a); }
C++扩展了C的输入输出,不但可用printf、scanf函数,还 可以用输入输出流。
4
C++输入输出标准流
流名 cin
含义 标准输入
默认设备 流名
键盘
cout
含义 输出
默认设备 屏幕
以上标准流为利用面向对象方法设计的输入输出流类的对象.
int a=2; int b=3; cout<<PI*R*R; return 1; }
程序输出15而不是想要的75的结构。
因为PI*R*R被展开为了3*a+b*a+b =15。 因此C++提供了const关键字来定义常 变量,用const定义的常变量具有变 量量的一些属性。(有数据类型、占 用内存空间、具有地址、可以用指针 来指向它等),唯一和变量不同的是 它的值只能在定义时指定。以后就不 能通过任何形式改变。
相关文档
最新文档