




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章 面向对象程序设计的概念,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 Length 100 #define PI 3.1415926 const int NULL=0 const int Length =100 const 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,不用在一个枚举类型名之前加关键字enum。,一般语法的改进,动态内存分配,new int*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 ,指针和引用,什么不能被引用,void ,指针和引用,引用作为函数参数-地址传递,指针的代码可读性差,指针作为参数传递,用户调用知道函数是如何工作的。 解决大对象值传递会产生副本的问题 程序清单2-3,指针和引用,引用作为函数参数-地址传递,存在的问题 引用隐藏了函数所使用的参数传递的类型,应避免重载匹配错误 void fn(int s); void fn(int 用const 限定引用 double fn(const double &pd),指针和引用,函数原型,例: int func(int,int); C+ 要求所有函数都有函数原型 程序的顶部 头文件 C提供更强的类型检查,允许编译程序对下列情况报错误信息: 被调用函数参数类型定义和类型转换非法 函数的参数个数不相符 函数不能返回预定的数据类型,函数的改进,内置函数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等复杂的结构控制语句,递归函数不能被用作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);,函数的改进,默认参数的使用说明,默认参数只能在函数声明中提供 若一个函数有多个默认参数,则在形参分布中从右到左逐个定义,在调用函数时,自左向右逐分配实参。 默认值可以是全局变量,常量,甚至一个函数,但不能是局部变量。,分析下面语句的正确性: 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 ); double 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); ,函数的改进,类和对象,类: 由用户定义的,将一组具有相关性的数据和操作封装在一起的抽象数据类型。数据称为数据成员,操作称为成员函数。 对象: 用类定义的变量,类和对象,类的定义 对象的定义 构造函数和析构函数 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; ;,成员函数的类型,构造函数 析构函数 普通成员函数 虚函数 注:除析构函数不能重载外,其他成员函数都是可以重载的,成员函数的实现,在类定义时实现 在类定义的外面实现 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-y pai.x pai.y,任务1,类和对象的定义 详见实验1,构造函数,构造函数的作用是构造对象初始化形式 在定义对象时,由应用程序自动调用 构造函数是类的一个特殊成员函数 它的函数名与类名相同, 没有返回类型 它可以有任意类型的参数 可以重载,默认构造函数,当类定义中没有用户定义的构造函数时,系统自动产生一个无参数的构造函数,称此构造函数为默认构造函数 当定义一个对象时,默认构造函数只是简单地把对象中的每个成员初始化为0或空.,构造函数的类型,无参构造函数 Point(); Point p1; 带参构造函数 Point(int ,int); Point p2(100,200); 复制构造函数 Point(const Point,拷贝构造函数示例,class A public: A(int); A(const A ,析构函数,析构函数也是类的特殊成员函数,它的函数名与类名相同,但它的名字前面有一个“”.它没有参数,没有返回类型,而且不能重载.,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 多继承示例,多态性,在 基类和派生类中使用同样的函数名而定义不同的操作,从而实现“一种接口,多种方法”。 类型 静态
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国汽车工程服务外包(ESO)行业现状调查与前景趋势研究报告
- 2025至2030中国水泥搅拌车行业市场发展现状及商业模式与投融资战略报告
- 2025至2030中国水化学需氧量分析仪行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国氯化橡胶漆行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国残疾人拐杖行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国横卧自行车行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国棉籽油行业发展趋势分析与未来投资战略咨询研究报告
- 2025-2030中国钽电容器行业发展趋势与前景动态预测报告
- 2025-2030中国金冶炼行业盈利动态及竞争格局预测报告
- GB/T 12060.21-2025声系统设备第21部分:基于输出的声学测量
- 高墩柱墩身施工方案
- 2023年甘肃兰州大学网络与继续教育学院人员招聘2人高频考点题库(共500题含答案解析)模拟练习试卷
- 肝内胆管结石详解
- 发电机励磁系统检修与维护
- 2023-2024学年福建省泉州市小学语文六年级期末自测模拟试卷
- GB 29541-2013热泵热水机(器)能效限定值及能效等级
- 控规用地代码
- 2023年上杭县社区工作者招聘考试笔试题库及答案解析
- 2021年曹杨二中自招数学试卷
- 新能源汽车底盘检修全套课件
- 幼儿园大班数学口算练习题可打印
评论
0/150
提交评论