《C++面向对象程序设计导论》-从抽象到编程 课件 01 类与对象_第1页
《C++面向对象程序设计导论》-从抽象到编程 课件 01 类与对象_第2页
《C++面向对象程序设计导论》-从抽象到编程 课件 01 类与对象_第3页
《C++面向对象程序设计导论》-从抽象到编程 课件 01 类与对象_第4页
《C++面向对象程序设计导论》-从抽象到编程 课件 01 类与对象_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章类与对象《C++面向对象程序设计导论》--从抽象到编程第1章类与对象1.1抽象第1章类与对象1.2类和对象的概念1.3类的声明和对象的定义本节学习目标能够运用语文知识解释类和对象及其抽象(概念思维)能够运用数学和计算机知识解释类和对象(计算思维)能够使用C++声明类、定义对象、访问属性1.1.1语文中的抽象抽象有概念、判断、推理等思维形式,语文中一般使用词语或语句来记录(或表示)抽象的过程。如:张三是一个人概念:人,电脑,手机判断:张三是一个人推理:张三不是电脑抽象:从客观世界到符号世界的映射概念思维1.1.1语文中的抽象语义:从符号世界到客观世界的映射概念:人,电脑,手机判断:张三是一个人推理:张三不是电脑文字的语义?读书:读文字还是其语义?1.1.2数学中的抽象数学中一般将客观世界中的事物抽象为数在第6章中讨论。自然数的理论主要有基数理论和皮亚诺公理,它们从不同角度回答了“自然数及其运算是什么?”这个基本问题。例如,“8是一个自然数”,其中,“自然数”是一个概念,代表一个集合,“8”是自然数这个集合中的一个元素。计算思维1.2类和对象的概念1.2.1属性与属性值1.2.2行为与函数1.2.3类的结构及其表示方法1.2.4对象的结构及其表示方法1.2.1属性与属性值数据类型形容词等词语属性值1.2.2行为与函数函数对象中为什么没有函数?一般用动词表示行为1.2.3-4类和对象的表示方法来源于中文、数学以及计算机语言1.3类的声明和对象的定义classPerson//人{public: voideat(charobj[]){};//吃(东西) voidsleep(void){}; //睡觉()

public: charname[20];//姓名 boolsex; //性别 intage; //年龄 floatheight; //身高 floatweight;//体重};1.3.1类的声明1.3.2定义对象Personp1;//全局对象voidmain(){ //设置张三("张三",1,18,180.5,65.3)的属性 strncpy(,"张三",sizeof()); p1.sex=1;//男 p1.age=18; p1.height=180.5; p1.weight=65.3;

//定义类Person的对象p2,并设置属性值

Personp2;//李四("李四",0,16,165,46.5) strncpy(,"李四",sizeof()); p2.sex=0;//女 p2.age=16; p2.height=165; p2.weight=46.5;}1.3.3访问对象的成员变量 strncpy(,"张三",sizeof()); p1.sex=1;//男 p1.age=18; p1.height=180.5; p1.weight=65.3;.成员选择(对象)Memberselection(object)从左到右exp.xx计算exp得到对象ob,得到ob的成员xx–>成员选择(指针)Memberselection(pointer)从左到右exp->xx计算exp得到指到成员变量的指针p,得到指针p指向的成员变量的成员xx练习读懂这几张图的语义VS2013上编辑调试【例1.1】中的代码总结及进一步学习思维:语文的概念抽象,数学中的数学抽象设计:类和对象的概念以及表达方法编码:使用C++声明类、定义对象,访问成员变量1.4成员函数的定义和调用进一步学习第1章类与对象1.4.1定义成员函数1.4成员函数的定义和调用1.4.2调用成员函数1.4.3成员函数与普通函数的区别1.4.4成员函数调用的内部实现学习目标能够运用数学知识解释成员函数能够运用计算机知识解释成员函数的内部实现原理能够使用C++定义和调用成员函数1.4.1定义成员函数将类中声明或定义的函数称为类的成员函数。定义成员函数的方法与定义函数非常类似。按照定义函数的方法来定义类的成员函数,并在成员函数中直接使用类的属性名访问属性的值。【例1.2】定义和调用成员函数classPerson//人{public:

voidsetValue(charnameV[],boolsexV,intageV,floatheightV,floatweightV){ cout<<"我知道怎么设置人的属性,我已完成!"<<endl; strncpy(name,nameV,sizeof(name));//姓名

sex=sexV;//性别 age=ageV;//年龄 height=heightV;//身高 weight=weightV;//体重 } voidprint(){ cout<<"我是一个人,我的属性值为:"<<name<<"," <<sex<<"," <<age<<"," <<height<<"," <<weight<<endl; } voideat(charobj[]){//吃(东西) cout<<"我是一个人"<<name<<",但我还没有学会怎么吃:"<<obj<<endl; }; voidsleep(void){//睡觉() cout<<"我是一个人"<<name<<",我会睡觉,但还说不清楚是怎么睡觉的。"<<endl; }

public: charname[20];//姓名

boolsex; //性别 intage; //年龄 floatheight; //身高 floatweight;//体重};1.4.2调用成员函数Personp1;//张三

voidmain(){

//设置张三("张三",1,18,180.5,65.3)的属性

p1.setValue("张三",1,18,180.5,65.3);

p1.eat("西瓜"); p1.sleep(); p1.print();

Personp2;//李四 cout<<endl; p2.setValue("李四",0,16,165,46.5); p2.print();}对象名.成员函数名(实参列表)调用成员函数的执行过程Personp1;//张三

voidmain(){ //设置张三("张三",1,18,180.5,65.3)的属性

p1.setValue("张三",1,18,180.5,65.3); p1.eat("西瓜"); p1.sleep(); p1.print();

Personp2;//李四 cout<<endl;

p2.setValue("李四",0,16,165,46.5); p2.print();}跟踪调试代码,理解调用成员函数的执行过程对象名.成员函数名(实参列表)1.4.3成员函数与普通函数的区别Personp1;//张三

voidsetValue(Person*p, charnameV[],boolsexV,intageV,floatheightV,floatweightV){ cout<<"我知道怎么设置人的属性,我已完成!"<<endl; strncpy(p->name,nameV,sizeof(p->name));//姓名

p->sex=sexV;//性别 p->age=ageV;//年龄 p->height=heightV;//身高 p->weight=weightV;//体重}

voidmain(){ //设置张三("张三",1,18,180.5,65.3)的属性

setValue(&p1,"张三",1,18,180.5,65.3); p1.print();

Personp2;//李四 cout<<endl; setValue(&p2,"李四",0,16,165,46.5); p2.print();}p1.setValue("张三",1,18,180.5,65.3);功能相同但函数原型不同,调用语句不同1.4.4成员函数调用的内部实现classPerson//人{public:

voidsetValue(charnameV[],boolsexV,intageV,floatheightV,floatweightV){ cout<<"我知道怎么设置人的属性,我已完成!"<<endl; strncpy(name,nameV,sizeof(name));//姓名 sex=sexV;//性别 age=ageV;//年龄 height=heightV;//身高 weight=weightV;//体重 }};按照下面代码的语义编译setValue()成员函数voidsetValue(Person*this,charnameV[],boolsexV,intageV,floatheightV,floatweightV){ cout<<"我知道怎么设置人的属性,我已完成!"<<endl; strncpy(this->name,nameV,sizeof(this->name));//姓名

this->sex=sexV;//性别 this->age=ageV;//年龄 this->height=heightV;//身高 this->weight=weightV;//体重}p1.setValue("张三",1,18,180.5,65.3)按照下面代码的语义编译成员函数调用setValue(&p1,"张三",1,18,180.5,65.3);this练习读懂这几张图的语义VS2013上编辑调试【例1.2】中的代码总结及进一步学习设计:成员函数的概念、作用和表述方法编码:使用C++定义和调用成员函数调试:编译成员函数的原理和内部实现机制1.5创建和删除对象进一步学习第1章类与对象1.5.1构造对象1.5创建和删除对象1.5.2全局对象和静态对象1.5.3堆对象和对象数组1.5.4语义的实现和优化学习目标能够理解创建和删除对象的原理,理解构造函数和析构函数的概念和作用能够使用C++定义构造函数和析构函数,并创建和删除对象能够理解创建和删除对象的内部实现机制,并使用时序图描述对象的创建和删除过程1.5.1构造对象在计算机中创建一个对象时,应该同时指明这个对象代表的是哪个客观事物,这就要求在定义一个对象时设置对象的属性值。构造函数(Constructor)是特殊成员函数,用于初始化对象。Person(charnameV[],boolsexV,intageV,floatheightV,floatweightV)析构函数(Destructor)是特殊成员函数,用于处理一些善后工作。创建一个对象p1,语句为:Personp1("张三",0,18,180.5,65.3)语义为:①为对象p1分配内存;②按照p1.Person("张三",0,18,180.5,65.3)的语义调用构造函数,作用是给对象p1的成员变量赋初值。【例1.4】自动调用构造函数classPerson//人{public:

Person(charnameV[],boolsexV,intageV,floatheightV,floatweightV){ cout<<"构造:我知道怎么设置人的属性,我已完成!"<<endl; strncpy(name,nameV,sizeof(name));//姓名 sex=sexV;//性别 age=ageV;//年龄 height=heightV;//身高 weight=weightV;//体重 }

~Person()

{ cout<<"析构:"<<name<<endl; } …….};Personp1("张三",0,18,180.5,65.3);//张三

voidmain(){ p1.print();

cout<<endl; Personp2("李四",1,16,165,46.5);//李四 p2.print();}【例1.4】自动调用构造函数Personp1("张三",0,18,180.5,65.3);//张三

voidmain(){ p1.print();

cout<<endl; Personp2("李四",1,16,165,46.5);//李四 p2.print();}描述对象的创建过程创建对象作为一个整体(简洁)创建对象中的两个步骤(详细)选择适合的描述粒度1.5.2全局对象和静态对象#include

<iostream>using

namespacestd;

class

Point{public: Point(double

dx,double

dy){ cout<<"调用Point("<<dx<<","<<dy<<")"<<endl; x=dx; y=dy; } ~Point(){ cout<<"析构Point("<<x<<","<<y<<")"<<endl; }private:

doublex;

doubley;};【例1.5】全局对象、静态对象和局部对象1.5.2全局对象和静态对象Pointg(0,0); //全局对象voidfn(){

static

Pointsf(1,1);//静态对象

Pointf(2,2); //局部对象}intmain(){

cout<<endl<<"第一次调用fn()函数"<<endl; fn();

cout<<endl<<"第二次调用fn()函数"<<endl; fn();

cout<<endl<<"退出main()函数"<<endl;}1.5.3堆对象和对象数组intmain(){ cout<<endl<<"创建对象"<<endl;

Point*ph=new

Point(3,3);

cout<<endl<<"创建对象数组"<<endl;

PointmA[3];//局部对象数组

Point*phA=new

Point[5];

cout<<endl<<"释放堆对象"<<endl;

delete[]phA; //释放堆中对象数组

deleteph;

//释放堆对象}1.5.4语义的实现和优化正确理解每条代码的语义是读懂程序的基础,也是编写代码的前提。计算机世界中的语义(数学)Pointg(0,0); //全局对象voidfn(){

static

Pointsf(1,1);//静态对象

Pointf(2,2); //局部对象}intmain(){

cout<<endl<<"第一次调用fn()函数"<<endl; fn();

cout<<endl<<"第二次调用fn()函数"<<endl; fn();

cout<<endl<<"退出main()函数"<<endl;}计算机世界客观世界中语义(语文)练习读懂这几张图的语义VS2013上编辑调试【例1.5】中的代码总结及进一步学习设计:构造函数和析构函数的概念、作用和表述方法编码:定义构造函数和析构函数,定义并初始化对象调试:创建和删除对象的原理和内部实现机制1.6程序设计思想和描述工具进一步学习第1章类与对象1.6.1程序设计思想的变迁1.6程序设计思想和描述工具1.6.2UML图形语言1.6.3面向对象程序设计言语学习目标能够使用类图描述类及其属性和行为的抽象过程能够使用对象图描述对象及其属性值的抽象过程学会一种建模软件的使用(PowerDesigner15.3)1.6.1程序设计思想的变迁1.结构化程序设计思想2.面向对象程序设计思想程序=数据结构+算法程序=对象(数据结构+算法)+对象….程序设计导论:从计算到编程程序设计导论:从抽象到编程面向对象程序的结构主要工作是设计和编写类1.6.2UML图形语言统一建模语言(UnifiedModelingLanguage,UML)是国际标准化组织OMG(ObjectManagementGroup)制定的一种图形语言,是目前常用的图形工具,并广泛应用于软件的分析设计。UML中,定义了类图、对象图、时序图、状态图、活动图等一系列的图及图标,并规定图的作用及图标的语义,可用这些图及图标从不同角度、不同层次上描述程序及其运行过程。本书主要使用类图、对象图、时序图描述程序的类、对象和程序运行过程。有关UML的知识,可查阅标准文本或其他资料。图形语言也是一种语言,其根本作用是人与人之间交流,因此,在画UML图时,应专注于表达自己的想法,而不能过度追求图形的美观,应以别人能够理解为度。选择:PowerDesigner15.3PowerDesigner15.3界面学习使用PowerDesigner15.3首选PD帮助文档PD使用知识学习专业英语网上学习资料UML知识软件建模方法UML标准文本深入学习自学演示:使用PD进行分析设计分析应用场景中事物抽象类及属性和行为增加计算机特性描述类的对象练习分析应用场景中事物抽象类及属性和行为增加计算机特性描述类的对象自主练习多练习,绘制教材中的图总结及进一步学习分析:使用PD记录类和对象的中间抽象结果设计:使用PD描述类和对象编码:使用PD描述编码所需

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论