一面向对象程序设计方案理论讲课教案

上传人:yulij****0329 文档编号:137236728 上传时间:2020-07-06 格式:PPT 页数:80 大小:261KB
返回 下载 相关 举报
一面向对象程序设计方案理论讲课教案_第1页
第1页 / 共80页
一面向对象程序设计方案理论讲课教案_第2页
第2页 / 共80页
一面向对象程序设计方案理论讲课教案_第3页
第3页 / 共80页
一面向对象程序设计方案理论讲课教案_第4页
第4页 / 共80页
一面向对象程序设计方案理论讲课教案_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《一面向对象程序设计方案理论讲课教案》由会员分享,可在线阅读,更多相关《一面向对象程序设计方案理论讲课教案(80页珍藏版)》请在金锄头文库上搜索。

1、1,一、面向对象程序设计理论,1.1面向对象的程序设计方法基础,1.2对象和类,1.3继承性,1.4重载,1.5多态性,2,1.1OOP基础,面向对象的程序设计方法(Object Oriented Programming)简称为OOP,它的基本元素是类(Class)和对象(Object)。,使用对象模拟自然的或抽象的实体,对用户掩盖了实现的复杂性(封装),并且能使程序员付出尽可能小的代价,获得尽可能大收益(继承),提高软件的开发效率。,3,1.2对象和类,类是对事物的特性及操作的抽象描述,对象是类的实体。,从C语言的角度来看,类是结构的自然演化,类就是包含数据声明和函数声明的结构。,类既包含了

2、数据又包含了代码,对类中成员的存取是受控制的,这一控制不仅针对数据,也针对代码,类的这个特性被称为封装。,4,计算过程的演变: 手工计算 全部手工和脑力完成 计算器(面向过程) 部分借助非人力因素,但仍需对过程进行控制和管理 计算机(面向对象) 完全借助非人力因素,运算一旦开始,可以无需人工的介入,封装的说明,6,定义类,class Counter long count; public: void SetValue(long); long GetValue(); ;,关键字class引导类声明,Counter是类标识符,类体,分号,7,使用类,类是一个模板,就象数据类型一样,使用的时候必须定义

3、类变量。定义类变量称为类的实例化,类的实例化变量就是对象。,void main () Counter people; long value; people.SetValue(0); value = people.GetValue(); ,对象是具有某一个类所描述的共性的,但又有各自特性的个体。,8,类存取控制,类的成员的使用者有三类: 1. 类本身 2. 一般用户 3. 派生类 每种使用者权限不同,对应与 不同的使用权限,有不同的关 键字说明。,9,类私有成员(private),类本身(或类的友元)可以存取类的私有成员。派生类不能存取其父类的私有成员。 因为类必须在程序中使用,所以类必须至少有

4、一个非私有的成员。 类成员的存取控制缺省为私有类型。,10,类私有成员(续),class PrivateClass long value; void f1(); void f2(); ;,void main() PrivateClass object; long l = object.value; object.f1(); object.f2(); ,提问:上述程序可以达到预期效果吗?,类私有成员(续),11,类公有成员(public),在程序中使用给定类的对象,必须能存取成员数据、成员函数或两者。为使这些成员在程序中可以被存取,必须在类中声明公有部分。 在公有部分定义的内容允许被其他对象无限

5、制地存取。通常可以有控制地使用公有成员存取私有数据,调用私有成员函数完成工作。,12,类公有成员(续),class PublicExample public: int variable; void function(); ;,void main() PublicExample object; int i = object.variable; object.function(); ,13,类保护成员(protected),class A protected: int value_a; ; class B:public A public: void FB(); ; class C:public B

6、 public: void FC(); ,void B:FB() value_a = 0; void C:FC() value_a = 0 ,14,问题,class A int value_1; protected: int value_2; void FA_1(); public: int value_3; void FA_2(); ;,class B:public A public: int value_4; void FB(); ,问:在类B的FB函数中可以直接存取的成员有哪些? 问:通过类B的对象在程序中可以直接访问的成员有哪些?,15,特殊类成员,特殊类成员,1、构造函数(const

7、ructor),2、析构函数(destructor),16,构造函数,构造函数是用来建立某给定类的对象的。一个类可以不定义构造函数,也可以定义一个或多个构造函数。编译系统保证类的构造函数先于其他函数被调用。,17,构造函数(续一),class Counter long value; public: Counter(); ; Counter:Counter() value = 100; ,void main() Counter c1; return; ,构造函数Counter() 它有什么特点?,18,构造函数(续二),class Counter long value; public: Coun

8、ter(); ; Counter:Counter(int i) value = i; ,void main() Counter c1(100); return; ,构造函数Counter() 它有什么特点?,19,构造函数(续三),class Counter long value; public: Counter() Counter(int i); ; Counter:Counter() value = 100; ,Counter:Counter(int i) value = i; void main() Counter c1; Counter c2(100); return; ,20,构造函

9、数(续四),class Counter long value; public: Counter() value = 100; Counter(int i = 0) value = i; ; void main() Counter c1; Counter c2(100); ,问:Counter类是否能包含如上所示的两个构造函数?为什么?,21,构造函数(续五),class Counter long value; public: Counter(Counter ,22,void main() Counter object(5); Counter object1 = object; ;,构造函数(续

10、六),这个等号表示复制构造函数,void main() Counter object(5); Proc_A(object); ;,把对象作为参数传递,也需要拷贝构造函数。,23,构造函数(小结一),1、缺省构造函数,2、有特定初始化值的构造函数,3、通过复制另一个对象建立新对象的构造函数,24,构造函数(小结二),1、构造函数没有返回类型,2、构造函数与类同名,3、同一个类可以有多个构造函数,25,构造函数(思考题),class Counter long value; public: Counter(); ; class Example int value; public: Counter c

11、; Example(); ;,void main() Example e; ,在本例中,当c对象作为e对象的成员。 问:c对象和e对象的构造函数的调用顺序是怎样的?,26,析构函数,析构函数在对象不再被使用时,执行一些必须的操作,一般是构造函数的逆操作。一个类只能声明一个析构函数。 析构函数是构造函数的逆函数。,27,析构函数(续),class Counter long value; public: Counter(); ; Counter:Counter() printf(“”); ,析构函数在声明和使用上有什么特点?,28,析构函数(小结),1、析构函数没有返回类型,2、析构函数的命名是在

12、类名前加“”,3、一个类只能有一个析构函数,4、析构函数没有参数,29,1.3继承性,从编码角度讲,从基类中派生类以较低代价换来了大量的灵活性。一旦产生了可靠的基类,只需要调试派生类中所做的修改即可。 派生类从它的父类中继承性质时,可使派生类对它们进行扩展、限制、改变、删除或不做任何修改。所有这些变化归结成两类基本的面向对象技术:性质约束和性质扩展。,30,单一继承,class First int value_1; protected: int value_2; public: int value_3; ;,class Second:First int value_4; public: voi

13、d F2(); ;,问:在程序中可以访问的Second类的对象的成员变量有那些?,31,基类存取限定符,class First int value_1; protected: int value_2; public: int value_3; ;,class Second:public First int value_4; public: void F2(); ;,基类存取限定符,32,基类存取限定符(续),private:如果没有特别说明,private是缺省的限定符。基类中所有可继承的成员在派生类中都变成私有的。 public:基类中所有public成员在派生类中仍为public成员,,3

14、3,构造函数的调用,class A public: A() ; ; class B : public A public: B() ; ;,如果现在将类B实例化成一个对象,构造函数的调用情况会如何?,34,构造函数的调用(续),类实例化时,需要调用其构造函数。如果该类是派生类,必须调用其父类的构造函数,如果其父类也是派生出来的,重复该过程直至到达非派生的基类。,35,析构函数的调用,析构函数的调用顺序与构造函数的调用顺序相反。,36,构造函数的参数传递,class A public: int va; A(int i) va = i; ; class B:public A public: int

15、vb; B(int i, int j) va = i; vb = j ;,37,构造函数的参数传递(续),class A public: int va; A(int i) va = i; ; class B :public A public: int vb; B(int j, int i):A(i) vb = j; ;,38,派生类的类型转换,void main First c1; Second c2; First * d1 = new First; Second * d2 = new Second; c1 = c2; d1 = d2; ;,如果这样则不行: c2 = c1; d2 = d1;

16、,39,作用域的分辨,class A public: int get () return 1; ; class B:public public: int get () return 2; ;,void main() A a; B b; int i = a.get(); int j = b.get(); ,40,作用域的分辨(续),class A public: int get () return 1; ; class B:public A public: int get () return 2; ;,void main() A a; B b; int i = a.get(); int j = b.get(); int k = b.A:get(); ,作用域分辨操作符,41,性质

展开阅读全文
相关资源
相关搜索

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

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号