第二章面向对象程序设计的概念.ppt

上传人:sccc 文档编号:5671800 上传时间:2023-08-08 格式:PPT 页数:46 大小:138.51KB
返回 下载 相关 举报
第二章面向对象程序设计的概念.ppt_第1页
第1页 / 共46页
第二章面向对象程序设计的概念.ppt_第2页
第2页 / 共46页
第二章面向对象程序设计的概念.ppt_第3页
第3页 / 共46页
第二章面向对象程序设计的概念.ppt_第4页
第4页 / 共46页
第二章面向对象程序设计的概念.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《第二章面向对象程序设计的概念.ppt》由会员分享,可在线阅读,更多相关《第二章面向对象程序设计的概念.ppt(46页珍藏版)》请在三一办公上搜索。

1、第二章 面向对象程序设计的概念,C与C+的差别引用类和对象构造函数和析构函数,C对C的改进,一般语法的改进指针和引用函数的改进,C的输入和输出,include“stdio.h”printf(“hello c”);scanf(“%d”,#include”iostream.h”cout sum;cout“sum is”sum endl;,一般语法的改进,注释,/*.*/,一般语法的改进,变量定义,变量定义可以位于程序中的任何地方,下面的语句有问题吗?for(int i=0;i10;i+)int c;c*=2;int s;,一般语法的改进,符号常量的定义,define NULL 0#define L

2、ength 100#define PI 3.1415926const int NULL=0const int Length=100const double PI=3.1415926,一般语法的改进,强制转换类型,C的强制类型转换法(类型名)表达式函数表示法(仅限简单类型)类型名(表达式)int i=int(1.35);,一般语法的改进,结构体与枚举类型的用户标识名,enum traffic red,green,yellow;struct student int num;char name20;traffic Light;student stu1;,!不必在一个结构体名之前加struct,不用在

3、一个枚举类型名之前加关键字enum。,一般语法的改进,动态内存分配,newint*p,*q,*s;p=new int;s=new int(200);q=new int10;delete delete p;delete q;,一般语法的改进,#include“iostream.h”void main()int*p;p=new int;*p=10;cout*p;delete p;,引用类型的概念,引用是指给对象的地址取个别名,对引用的改动则是对目标的改动。int int1;int 引用不是值,不占有存储空间引用必须初始化,并且不再指向其他不同的变量,指针和引用,什么能被引用,double,指针和引

4、用,什么不能被引用,void,指针和引用,引用作为函数参数-地址传递,指针的代码可读性差,指针作为参数传递,用户调用知道函数是如何工作的。解决大对象值传递会产生副本的问题程序清单2-3,指针和引用,引用作为函数参数-地址传递,存在的问题引用隐藏了函数所使用的参数传递的类型,应避免重载匹配错误void fn(int s);void fn(int用const 限定引用double fn(const double&pd),指针和引用,函数原型,例:int func(int,int);C+要求所有函数都有函数原型程序的顶部头文件C提供更强的类型检查,允许编译程序对下列情况报错误信息:被调用函数参数类型

5、定义和类型转换非法函数的参数个数不相符函数不能返回预定的数据类型,函数的改进,内置函数inline,#include void main()int a(8),b(16),c;inline int max(int,int);c=max(a,b);cout”c=”cendl;int max(int x,int y);cout”c=”cendl;,内置函数inline,实质:编译器为inline 函数创建代码,在每次碰到该函数的调用都用相应的一段代码替换说明:关键字inline一般放在函数声明的前面inline放在函数定义的前面时,函数定义要在调用函数的前面限制:不能含有switch,while等复

6、杂的结构控制语句,递归函数不能被用作inline函数,函数的改进,inline 与宏定义,宏所作的是机械代换,在参数为表达式时会产生不可预知的错误宏不能作类型检查 define f(m)m*m 宏定义调用:f(5+5)5+5*5+5,函数的改进,函数的默认参数,可以在函数声明时,对参数赋与默认值,调用没有给出实参时,就使用默认值。void delay(int loops=1000);void delay(int loops)if(loops=0)return;for(int i=0;iloops;i+);delay();delay(5000);,函数的改进,默认参数的使用说明,默认参数只能在函

7、数声明中提供若一个函数有多个默认参数,则在形参分布中从右到左逐个定义,在调用函数时,自左向右逐分配实参。默认值可以是全局变量,常量,甚至一个函数,但不能是局部变量。,分析下面语句的正确性:void func(int a=1,int b,int c=3,int d=4);void func(int a,int b=2,int c=3,int d=4);func(10,15,20,30);func();func(12,12);func(2,15,20);,函数的改进,重载函数,函数具有相同的名字,但有不同的参数,完成不同的操作int abs(int i);long abs(long g);doub

8、le abs(double d);,函数的改进,重载函数说明,重载函数至少在参数的个数、参数的类型、或参数的顺序上有所不同不能用typedef 的类型名区分重载函数中的参数 typedef int Length;void func(int);void func(Length);让重载函数执行不同的功能,是不好的编程风格。,函数的改进,避免二义性编译错误,void print(long)void print(double)调用:void func(int a)print(a);,函数的改进,类和对象,类:由用户定义的,将一组具有相关性的数据和操作封装在一起的抽象数据类型。数据称为数据成员,操作称

9、为成员函数。对象:用类定义的变量,类和对象,类的定义对象的定义构造函数和析构函数this指针,类的定义,class 类名private:私有段数据及函数 protected:保护段数据及函数 public:公有段数据及函数;省略时默认为private,成员访问类型,Point类的设计,class Point int x;int y;public:void set_x(int k)x=k;void set_y(int k)y=k;int get_x()return x;int get_y()return y;,成员函数的类型,构造函数析构函数普通成员函数虚函数注:除析构函数不能重载外,其他成员函

10、数都是可以重载的,成员函数的实现,在类定义时实现在类定义的外面实现 int Point:get_x()return x;,对象的定义,对象的定义Point p1;Point*p;Point pa100;Point*parray100;,公有成员的使用,从类外访问公有段的数据成员或成员函数对象名.公有段数据成员对象名.公有段成员函数(实参表)类名:公有段数据成员类名:公有段成员函数(实参表)例p1.x p1.y p1.set_x(20);x=p1.get_x();p-x p-ypai.x pai.y,任务1,类和对象的定义详见实验1,构造函数,构造函数的作用是构造对象初始化形式在定义对象时,由应

11、用程序自动调用构造函数是类的一个特殊成员函数它的函数名与类名相同,没有返回类型它可以有任意类型的参数可以重载,默认构造函数,当类定义中没有用户定义的构造函数时,系统自动产生一个无参数的构造函数,称此构造函数为默认构造函数当定义一个对象时,默认构造函数只是简单地把对象中的每个成员初始化为0或空.,构造函数的类型,无参构造函数Point();Point p1;带参构造函数Point(int,int);Point p2(100,200);复制构造函数Point(const Point,拷贝构造函数示例,class A public:A(int);A(const A,析构函数,析构函数也是类的特殊成员

12、函数,它的函数名与类名相同,但它的名字前面有一个“”.它没有参数,没有返回类型,而且不能重载.,this 指针,this 是一个指向调用该函数的对象的常量指针。成员函数可通过this指针直接使用同类的其它成员this指针是隐含的int get_length()return length;int get_length()return this-length;,继承,在已有类的基础上定义新类的过程称为继承。基类(base class)和派生类派生类的定义class:.,继承的方式,例2-22 单继承示例,多继承,派生类从多个基类派生,派生类具有多个基类的特性派生方法:class 派生类名:继承方式1 基类名1,继承方式2 基类名2,.继承方式n 基类名n.;,例2-23 多继承示例,多态性,在 基类和派生类中使用同样的函数名而定义不同的操作,从而实现“一种接口,多种方法”。类型静态多态性:编译时实现,通过重载动态多态性:运行时实现,通过派生和虚函数,虚函数,在继承体系中,如果在派生类中要对所继承的成员函数重新定义其功能,该函数应在基类中被定义为虚函数。虚函数是指在基类中的成员函数前加上virtual,然后在派生类中再加以定义的函数。当用指向派生类的对象的基类指针对函数进行访问时,系统将根据运行时指针所指向的实际对象来确定调用哪一个类的成员函数版本。,例2-25 虚函数示例,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号