收藏 分享(赏)

面向对象程序设计一 C++概述.ppt

上传人:dreamzhangning 文档编号:3353406 上传时间:2018-10-17 格式:PPT 页数:53 大小:735.50KB
下载 相关 举报
面向对象程序设计一 C++概述.ppt_第1页
第1页 / 共53页
面向对象程序设计一 C++概述.ppt_第2页
第2页 / 共53页
面向对象程序设计一 C++概述.ppt_第3页
第3页 / 共53页
面向对象程序设计一 C++概述.ppt_第4页
第4页 / 共53页
面向对象程序设计一 C++概述.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

1、面向对象程序设计,任课教师信息,姓名: 钟樑 手机: 15708318765(618765) Email: ,课程目标,学习目标: 掌握面向对象程序设计的基本概念及基本思想; 掌握类、对象的概念及C+语言实现方法; 掌握继承的概念及C+语言实现方法; 掌握多态的概念及C+语言实现方法; 掌握WINDOWS程序设计的基本概念 掌握MFC程序设计核心概念 能熟练使用C+进行DOS程序开发。 能熟练使用MFC进行WINDOWS程序开发。,课程学习方法,理论学习 理解、掌握基本概念,多看例题 理论指导实践,实践提高认识实践学习 勤思考,多动手 重视上机实习环境 坚持自学关键在于多编写程序,成绩评定,平

2、时成绩(10%)+实验(30%)+期末考试成绩(60%)平时成绩包括考勤,作业等 实验成绩根据考勤及实验内容完成的情况确定 期末考试指学期末学校安排的正式考试,教材使用,使用教材C+面向对象程序设计 推荐资料 C+ Primer 第四版,Lippman等著,李师贤等译,人民邮电出版社。 C+ 编程思想,埃克尔等著,刘宗田等译,机械工业出版社。 MFC Windows 程序设计,Jeff Prosise著,清华大学出版社。 深入浅出MFC,侯俊杰著, 华中科技大学出版社。 STL源码剖析,Effective C+,More Effective C+,C+ Template,Windows核心编程

3、。 MSDN,良好的编程习惯,科学的命名方法 一个不规范的例子:int fun3(int i, const char* j) int a = 0, b = 0, c = 0;a = fun1(j);b = fun2(j);c = b a i;if(c 0) cout “error“;return -1;else return c; ,良好的编程习惯,更改后的例子:int WithdrawMoney(int _money, const char* _identity)int loanMoney = 0, totalMoney = 0, leftMoney = 0; loanMoney = Get

4、LoanMoney(_identity);totalMoney = GetTotalMoney(_identity);leftMoney = totalMoney - loanMoney - _money;if(leftMoney 0)cout “there is no enough money left“;return -1;elsereturn leftMoney;,良好的编程习惯,科学的命名方法带来的好处:提高程序的可读性,易记性,以及可维护性。 科学命名方法的一些好的习惯:1、恰如其分的变量名和函数名。2、适当的命名长度。e.g.用一个变量来表示中国参加奥林匹克的人数。不合适的命名方法

5、:numberOfPeopleOnTheChinaOlympicTeam适宜长度的命名方法:chTeamMembers, chMemberCount,良好的编程习惯,3、通过首字母大小写区分变量、类型以及函数。4、使用标准的前缀。5、不要忘记循环下标、临时变量以及状态变量 的命名。不好的例子: for(int i = 0; i total; i+)while(flag = 1)比较好的更改:for(int teamIndex = 0; teamIndex teamCount; teamIndex+)while(morePeople = 1),扩展阅读:代码大全,良好的编程习惯,匈牙利命名法:一

6、套目前使用最广泛的前缀命名法,其主要包括属性前缀,类型前缀以及描述前缀三种。 属性前缀g_xx: 全局变量 c_xx:常量m_xx:成员变量 s_xx:静态变量 类型前缀指针:p 函数:fn 布尔型:b计数: c/cnt 整形: i 字符:ch浮点数:f/d 长整形: l 无符号:u字符串: sz 字: w 字节: by 函数: fn,良好的编程习惯,描述前缀:最大: Max 最小: Min 初始化: Init源:Src 目的: Dest 临时: Te.g.g_cchNumberpszCompNamepfnIsEmptybool Copy(string srcData, string dest

7、Data),对字符进行计数的全局变量,指向字符串的指针,表示公司名,指向函数的指针,判断是否为空,C+程序语言概述入门,普遍的观点:C+语言难学主要原因:C+语言实际上是4门语言的集合 完全兼容C语言的结构化编程模式(C语言) 面向对象程序设计(传统意义的C+) 通用模板库STL:Standard Template Library 范式编程(模板化开发语言),C+语言概述编程环境,C+语言的编程环境:推荐使用:Visual Studio 2005以上版本,C+语言概述Hello World,必不可少的Hello World程序#include using namespace std;int m

8、ain()cout “Hello World” endl;return 0;,C+标准头文件,C+标准命名空间,cout为C+的输出流,C+语言概述关键字,C+的关键字 C+包括了60个关键字,和C语言相比增加了28个关键字,分别是: 面向对象:class, this, virtual, typenametypeid, friend, public, private, protected 异常处理:throw, catch 类型转换:const_cast, static_cast, dynamic_cast, reinterpret_cast 模版: template 命名空间:namespa

9、ce, using,C+语言概述关键字,C+的关键字 运算符: operator, new, delete 布尔运算: bool, false, true 其它: explicit, inline, mutable C+中意义发生变化的关键字 struct,C+语言概述数据类型,C+的数据类型:和C语言的数据类型基本相同,主要包括:char(1), unsigned char(1), short(2), unsigned short(2), int(4), unsigned int(4), long(4) , unsigned long(4), float(4), double(8), lon

10、g double(8)。增加的数据类型为:bool(1),C语言的bool定义方式一般为: #define int BOOL #define TRUE 1 #define FALSE 0,问题在于占用了4个字节,C+语言概述控制语句,C+的控制语句:C+的控制语句与C语言完全相同,主要包括:选择控制: if, else-if, switch-case循环控制:while, do-while, for;其它:break, continue, goto.,C+语言概述输入输出,C+的输入输出:C+的输入输出和C语言不同,采用了一种被称为I/O流的方式,其实质是利用面向对象技术对传统输入输出进行封装

11、的产物。1、cout表达式:用于输出数据基本用法:cout 表达式 表达式 例:cout “Hello world”;cout “a + b = ” a + b;,C+语言概述输入输出,2、cin表达式:用于输入数据基本用法:cin 表达式 表达式 例:int a, b;cin a b;在键盘上输入 5 6 cout a “ ” b endl;输出结果为:5 6,使用时必须包含: #include ,endl为控制字符,即回车或等同于n,C+语言概述输入输出,3、输入输出控制,必须使用#include ,C+语言概述常量const,回顾:C语言中常量定义#define PI 3.1415926

12、 存在的问题:非类型变量,容易在使用时出错。 因此,引入了const限定符用于定义一个常变量。 const的作用:定义一个变量,其具有固定的值,不允许修改,因此必须在申明时初始化。 例1:const int i = 10;int const j = 10;i = i + 3;j = j 5;,推荐使用,不推荐使用,编译出错,编译出错,C+语言概述常量const,const与指针指针简单回顾: int m = 10; int *p = ,10,指针p,m,推荐使用,不推荐使用,编译出错,C+语言概述常量const,const指针(即指针本身是不能修改的)形式:类型 * const p;例:int

13、 m = 10, n = 11;int * const p = 区分的技巧主要是看const是在*号的哪边,如果是在左边,即为指向const的指针;如果是在右边,即为const指针,10,11,m,n,指针p,p只能指向m,试图指向n,出错,C+语言概述常量const,指向const的const指针:const int* const p = 一个地址;int const* const p = 一个地址;例:int m = 10, n = 11;const int* const p = ,编译出错,编译出错,C+语言概述常量const,综合实例:int a = 3, b = 4;const in

14、t* p1; int const* p2;int* const p3 = ,正确,非法,因为指针指向的内容不能被修改,正确,非法,指针本身不能改变,非法,因为指针指向的内容不能被修改,非法,指针本身不能改变,C+语言概述引用,引用引用是C+对C语言的一个重要扩充,其实质是一种别名机制。引用所使用的符号为:,此时输出的结果为:1010,10,a,10,a,C+语言概述引用,引用的实质int a = 10;int ,别名:b,输出的地址是一致的,别名:b,100,a,输出结果为: 100 100,C+语言概述引用,引用使用的注意事项: 引用在声明时必须初始化 例:int ,非法,可行,可行,非法,

15、C+语言概述引用,引用使用的注意事项: 指针的引用 例1: int m = 10; int ,输出结果,为3个10,10,m,别名n,指针p-,C+语言概述引用,指针的引用例2:int m = 5;int *p = ,5,指针p-,别名指针q-,m,输出结果,均为10,C+语言概述引用,引用的好处例1:写一个交换两个变量值的程序。void swap(int *a, int *b)int temp = *a;*a = *b;*b = temp;void main() int i = 10, j = 11;swap(,10,11,i,j,a-,b-,11,10,i,a-,b-,j,C+语言概述引用

16、,引用往往和const一起使用 关于const的例子:const int i = 10;i+; const和引用具有一个共同的特征:即必须在申明时同时初始化,这也注定const和引用会成为一对“好基友”。 例1:int i = 10;const int,此时编译器会报错,因为我们试图更改一个常量的值,此时编译器会报错,因为我们试图更改一个常量的值,C+语言概述引用,引用的好处引入引用后例1的更改:void swap(int ,C+语言概述引用,引用的好处例2:struct Studentchar name10; /包含了很多的属性void SomeFunction(Student stu) /

17、实现某种功能/in MainStudent student1;SomeFunction(student1);,Void SomeFunction(Student& stu),C+语言概述类型别名,typedef: 定义一个数据类型别名。通用用法: typedef 原类型 类型别名;例1:typedef int Integer;Integer i = 10;例2: typedef int* Integer_Pointer;int i = 10;Integer_Pointer p = ,int i = 10,int *p = &i,C+语言概述类型别名,例3:typedef int (*Add_F

18、unc) (int, int);实际上定义了一个函数指针,指向了一个返回值为int型,且接收两个int型参数的函数。int Add(int num1, int num2) return num1 + num2;void main() Add_Func fun1 = Add;cout fun1(2,5); ,输出结果为7,vector:const_iterator,C+语言概述函数重载,函数重载:例:寻找最大值。int Max(int a, int b) return a = b ? a : b;float Max1(float a, float b) double Max2(double a,

19、 double b) 重载的目的:实现一物多用。int Max(int a, int b) float Max(float a, float b) double Max(double a, double b) ,int a = 10, b = 10; float m = 3.21, n = 4.25; Max(a,b); /调用int版本 Max(m,n); / 调用float版本,C+语言概述动态内存分配,动态分配内存运算符new/delete 1、内存分配不得不提的两个概念:堆和栈,在堆上申请的内存必须手动释放,而在栈上申请的内存由操作系统自动释放。,C+语言概述动态内存分配,2、mall

20、oc和free的回顾:malloc原型:void* malloc(long numBytes);free原型: void free(void* byte);例:char *ptr = (char*)malloc(100*sizeof(char);if(ptr != null) /do somethingfree(ptr);,缺点1:必须进行强制转换,缺点2:需计算占用空间字节数,缺点3:由于是函数,执行效率不高,C+语言概述动态内存分配,3、 new的一般格式: new 类型(初值)或 new 类型数量,注: new返回的是类型为申请类型,且指向该变量内存地址或该类型数组首地址的指针,申请一个

21、普通变量空间,申请一个数组空间,例:int *p = new int(10);float* p = new float(3.1415926);char *p = new char100;int size = 10; int *p = new intsize;,C+语言概述动态内存分配,4、delete的一般格式: delete 指针或 delete 指针 例:int *p = new int(10);float* p = new float(3.1415926);char *p = new char100;,delete p;,delete p;,delete p;,释放一个普通变量空间,释放

22、一个数组空间,C+语言概述动态内存分配,思考:怎么样用new和delete来动态分配一个二维数组。例:用new和delete动态分配一个包含3行,每行4个元素的二维数组。,C+语言概述动态内存分配,分配步骤:第一步:动态申请一个包含3个指针元素的数组。int *p = new (int*)3;第二步:依次动态申请三个包含4个元素的数组。for(int i = 0; i 3; i+) pi = new int4; 释放步骤:第一步:依次释放动态创建的包含4个元素的数组。for(int i = 0; i 4; i+) delete pi;第二步:释放申请的包含3个指针元素的数组。delete p;

23、,C+语言概述内联函数,内联函数的申明:一般形式:inline + 函数申明例: inline int max(int a, int b) return a b ? a : b; 内联函数的好处:提高那些频繁使用的简单函数的执行效率。例:/in mainm = max(i, j);,a = i, b = j; m = a b ? a : b;,C+语言概述字符串变量,C+提供了一个很方便的字符串类型:string 基本用法: string 变量名; 注意:使用string时必须包含”string”头文件。#include 例1:string str;str = “Hello World”;co

24、ut str;cout str;,输出:Hello World,输入:Byebye,输出:Byebye,C+语言概述字符串变量,C语言中字符串的操作:strcmpstrcatstrcpy 在c+中,由于存在运算符重载这一概念,string为我们重载了多种运算符,方便的实现了以上功能,且使用起来相当简单。strcmp strcatstrcpy,两个字符串的比较,两个字符串的连接,字符串的拷贝,对应的C+运算符:=, =, , , !=,对应的C+运算符:+,对应的C+运算符:=,C+语言概述字符串变量,综合示例:void main()string str1, str2, str3, str4;s

25、tr1 = “c+”;str2 = str1;str3 = “I love”;str4 = str3 + str1;if(str1 str3) cout str1;else cout str3;,/定义了4个字符串变量,/完成类似strcpy操作,/完成类似strcat操作,/完成类似strcmp操作,/输出的应该是str1,C+语言概述有默认参数的函数,例:float CalcRoundSpace(float _radius, float pi) return pi * _radius * _radius; /一般调用过程CalcRoundSpace(3.2, 3.14);float Cal

26、cRoundSpace(float _radius, float pi = 3.14 /计算圆的面积 /此时调用此函数CalcRoundSpace(3.2);CalcRoundSpace(3.2, 3.142);,pi的值为默认值3.14,pi的值为传入值3.142,C+语言概述有默认参数的函数,使用注意事项 如果函数有多个形参,可以使每个形参都具有默认值,也可以部分形参具有默认值,但必须满足左结合法则(即形参默认值要从右至左依次给)。 例: void Fun1(int num1 = 13, int num2 = 15, int num3 = 17);Fun1(); Fun1(14); Fun

27、1(14, 18);,可行,均使用默认值,可行,num1 = 14,其它使用默认值,可行,num1 = 14, num2 = 18, num3使用默认值,C+语言概述有默认参数的函数,续前例: void Fun2(float num1, int num2, double num3 = 3.14);Fun2(3.1, 5); Fun2(3.1); void Fun3(int num1 = 2, float num2, short num3 = 5);Fun3(3.5);,可行,num3使用默认值,不可行,num2没有默认值,必须传值。,不可行,因为传参顺序从左到右,实际上,Fun3的声明形式会导致编译出错。,C+语言概述有默认参数的函数,有且仅在函数声明时给出形参的默认值。例:void Func(int i = 0, int j = 10);void Func(int i = 0, int j = 10) /Do Something void Func1(float x = 1.3, float y = 2.4)/Do Something,声明一个函数Func,具有默认参数,编译出错!定义该函数时再次尝试为参数设置默认值,可行,声明时同时定义函数;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报