面向对象 第1讲
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int iStuAge;
void vSetValue(char* pName,int iAge)
{
strcpy(cStuName,pName);
iStuAge=iAge;
}
void vToSay()
{
wenku.baidu.com
cout<<"\n My Name is:"<<cStuName
<<"\n My Age is:"<<iStuAge<<endl;
class CList { private:
CNode* pFirst; public:
CList(); void AddNode(CNode &t); void DelNode(CNode &t); void DispList(); };
数据元素定义-OOP方法
更进一步:
class CNode { public:
double max(double x, double y)
{ return (x>y?x:y); }
流(Stream)输入输出运算符
头文件 iostrem.h 输入流对象cin,运算符 >> 输出流对象cout,运算符<< 例:
int a,b; cout<<“\n Enter 2 integer:” ; cin>>a>>b; cout<<“\n a=“<<a
<<“ b=“<<b<<endl;
第一讲
END
Class & Object
#include<iostream.h> struct sStuName { char cStuName[10]; int iStuAge; };
Class & Object
void main() { sStuName s1; cout<<"\n Enter name:"; cin>>s1.cStuName; cout<<"\n Enter Age:"; cin>>s1.iStuAge;
内存动态分配(C++)
new 和 delete 例如 int *p,*pa;
p=new int; pa=new int[10]; 释放: delete p; delete []pa;
内存动态分配
区别 前者是动态分配内存/释放内存 后者是动态建立对象(可以初始化)/撤 销对象 前者是函数,后者是运算符
C++程序设计语言
新增语法和规范
引用运算符 & const 限定 原型(Prototype)声明 函数名重载(overload) 函数形参的默认值 内联(inline)函数 内存动态分配 new delete运算符 流(Stream)输入输出机器运算符 <<、>> 类(class)和对象 模版(template)
Tree)
若设二叉树的深度为h,则共有h层。除 第h层外,其它各层(0h-1)的结点数都达 到最大个数,第h层从右向左连续缺若干
结点,这就是完全二叉树。 不完全二叉树
二叉树的定义
二叉树的链式存储
节点定义 template<class T> class CNode { public:
T* pData; CNode* pLeft; CNode* pRight; CNode(T t) {
原型(Prototype)声明
变量声明 在变量被使用前
函数声明(类型安全性检查) 在函数被调用前
内存动态分配
变量声明是内存分配(加载时分配) 例如:int a,*p;
p=&a; 内存动态分配(运行时分配)C语言 例如:int a,*p;
p=(int*)malloc(sizeof(int)); free(p);//释放
有序树 无序树 森林
二叉树的定义
一棵二叉树是结点的一个有限集合,该集 合或者为空,或者是由一个根结点加上两 棵分别称为左子树和右子树的、互不相交 的二叉树组成。
特点:1)每个结点的度≤2;2)是有序 树
二叉树的性质
性质1 若二叉树的层次从1开始, 则在二叉树的
第 i 层最多有 2i-1个结点。(i 1)
▪ 有一个特定的称之为根(root)的结点 ,它只有后继,但没有前驱;
数据结构——树(tree)
▪ 除根以外的其它结点划分为m (m 0)个 互不相交的有限集合T0, T1, …, Tm-1,
每个集合本身又是一棵树,并且称之为根 的子树(subTree)。每棵子树的根结点有 且仅有一个直接前驱,但可以有0个或多 个后继。
{ int a=123,b=456;
double 1.23,d=4.56;
cout<<"\b Max is: "<<max(a,b)<<"\n";
cout<<"\b Max is: "<<max(c,d)<<"\n";
}
int max(int x,int y)
{ return (x>y?x:y); }
[证明用数学归纳法]
性质2 深度为k的二叉树最多有 2k-1个结点。
(k 1)
[证明用求等比级数前k项和的公式]
性质3 对任何一棵二叉树, 如果其叶结点个数为
n0, 度为2的非叶结点个数为 n2, 则有
n0=n2+1
二叉树的定义
定义1 满二叉树(Full Binary Tree) 定义2 完全二叉树(Complete Binary
const 限定
实现类型常量 int i=123; int const a=123; int const * pa=&i; int * const pa=&i; //error int * const pa=&a; double const pi=3.14159;//#define PI 3.14159 int da; da=pi; //error da=PI; //丢失
抽象类 包含纯虚函数的类,通常作为所有类的基类,不能建立抽 象类的对象
数据结构(概述)
计算接解决实际问题的步骤 1、设计实际问题的数学模型
数值计算(经典数学) 非数值问题(离散数学) 2、设计数学模型在计算机中的存储 3、在一定存储结构的基础上,设计处理方 法(算法),既程序设计。 数据结构主要寻求非数值问题解决方法
树的形态和术语
树的形态和术语
结点(node) 结点的度(degree) 分支(branch)结点 叶(leaf)结点 孩子(child)结点 双亲(parent)结
树的形态和术语
兄弟(sibling)结点 祖先(ancestor)结点 子孙(descendant)结点 结点所处层次(level) 树的深度(depth) 树的度(degree)
两类计算机语言(Compile & Script)
编译器Compiler 解释器Interpreter
OOP思想的三个核心概念
封装(encapsulation) 继承( inheritable) 多态(polymorphic)
抽象(Abstract)、重载(Overload) 模版(Template) 类(Class)、对象(Object)
pLeft=0; pRight=0; pData=new T(t); } };
课程考核与学习方法
学习方法:
课堂专注:观看+听讲 课后积极实践 责任心!
考核方法:
试卷考核+实验考核
教材和参考书目
《C++程序设计教程》钱能主编 清华版 《深入浅出MFC》侯俊杰 华科版 《数据结构》王红梅等编 清华版 相关C/C++语言、程序员的网站、网页
文库等
面向对象程序设计思想
cout<<"\n Name is:"<<s1.cStuName
<<"\n Age
is:"<<s1.iStuAge<<endl;
}
Class & Object
#include<iostream.h>
#include<string.h>
struct sStuName
{
char cStuName[10];
树型结构:存在一对多关系,层次关系。 图状结构(网状结构) :存在多对多关系
,任意性 计算机科学家沃斯(N.Wirth)提出的:
“算法+数据结构=程序”
数据元素定义
C语言(以链表节点为例) struct Student {
char name[10]; char num[10]; int age; struct Student * pNext; };
数据元素定义-OOP方法
class CNode { Private:
char name[10]; char num[10]; int age; public: CNode(char*pn=“noname”,char*
pnu=“nonum”,int ta=0); CNode* pNext; };
数据元素定义-OOP方法
2、导出类继承基类的全部特性 3、导出类可以增加新特性(成员) 4、导出类可以修改从基类继承的某个
(些)特性
虚函数与多态性
虚成员函数 用virtual 关键字声明的成员函数
多态性 对虚成员函数的调用,系统自动根据对象的不同,调用 正确的成员函数
纯虚函数 无(法)实际定义的虚成员函数,在函数原型后直接=0, 其实际意义,是为了在导出类中实际定义它
面向对象程序设计(OOP)
教学内容
面向对象程序设计(OOP)思想 C++中的面向对象实现 面向对象的数据结构 Windows平台程序设计
课程目的及教学方法
课程目的:
掌握OOP思想 了解数据结构
提高程序设计能力 Windows程序设计
教学方法:
课堂直接设计+讲解(36学时) 实验室编程(12学时)
}
int max(int x,int y,int z)
{
int tmp;
return (tmp=x>y?x:y)>z?tmp:z;
}
函数名重载
#include<iostream.h>
int max(int x,int y);
double max(double x,double y);
void main()
引用运算符&
int a,b; int &ia=a, &ib=b; //变量另一个名字
函数形参可以是引用(此时实参不能是常量) void swap(int &x, int &y) { int t;
t=x; x=y; y=t; } int a=123,b=456; swap(a,b); //实现a、b的值交换
}
};
Class & Object
void main() { sStuName s1,s2; s1.vSetValue("wang",21); s2.vSetValue("huang",22); s1.vToSay(); s2.vToSay(); }
类的导出与继承
1、从一个类(基类、父类)可以导出一 个新类(导出类、子类)
面向过程的程序设计
线性程序设计 结构化程序设计
面向对象程序设计
Object Oriented Programming (OOP) 工业化软件生产,目的是为了生产率
OOP的技术特征和学习意义
工业化程序设计、部件化生产 代码重用、高可维护性 真正结构化 降低专业门栏
OOP思想问世以来,极大改变了软件产业的面貌 OOP成为从业人员必须具备的一种思想观念
函数参数默认值
#include<iostream.h>
int max(int x,int y,int z=0 );
void main()
{
int a=123,b=456,c=789;
cout<<"\b Max is: "<<max(a,b)<<"\n";
cout<<"\b Max is: "<<max(a,b,c)<<"\n";
数据结构(概述)
概念: 数据、数据元素、数据结构
数据结构(Data structure) 相互之间存在一种或多种特定关系的数据元素的 集合
数据结构的几种基本结构 1、集合 2、线性结构 3、树形结构 4、图形结构
数据结构
集合:元素仅属于同一个集体,没有其他 关系。
线性结构:存在一对一 关系,序列相邻, 次序关系。
CNode* pNext; CPerson* pData; };
数据元素定义-OOP方法
再进一步,用模版构造通用算法: Template<class T> class CNode { public:
CNode* pNext; T* pData; };
数据结构——树(tree)
树的定义
树是由n (n 0)个结点组成的有限集合。 如果n = 0,称为空树; 如果n > 0,则: