面向对象程序设计方案理论.ppt
《面向对象程序设计方案理论.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计方案理论.ppt(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,计算过程的演变:手工计算全部手工和脑力完成计算器(面向过程)部分借助非人力因素,但仍需对过程进行控制和管理计算机(面向对象)完全借助非人力因素,运算一旦开始,可以无需人工的介入,封装的说明,5,特性:脚个数物理位置长度宽度高度形状,操作:搬动改造,类的说明,“桌子”类,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 PublicExamplepublic: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 public:void FC();,vo
6、id 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 Apublic:int value_4;void FB();,问:在类B的FB函数中可以直接存取的成员有哪些?问:通过类B的对象在程序中可以直接访问的成员有哪些?,15,特殊类成员,特殊类成员,1、构造函数(constructor),2、析构函数(destructor),16,构造函数,构造函数是用来建立
7、某给定类的对象的。一个类可以不定义构造函数,也可以定义一个或多个构造函数。编译系统保证类的构造函数先于其他函数被调用。,17,构造函数(续一),class Counter long value;public:Counter();Counter:Counter()value=100;,void main()Counter c1;return;,构造函数Counter()它有什么特点?,18,构造函数(续二),class Counter long value;public:Counter();Counter:Counter(int i)value=i;,void main()Counter c1(
8、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,构造函数(续四),class Counter long value;public:Counter()value=100;Counter(int i=0)value=i;void ma
9、in()Counter c1;Counter c2(100);,问:Counter类是否能包含如上所示的两个构造函数?为什么?,21,构造函数(续五),class Counter long value;public:Counter(Counter,22,void main()Counter object(5);Counter object1=object;,构造函数(续六),这个等号表示复制构造函数,void main()Counter object(5);Proc_A(object);,把对象作为参数传递,也需要拷贝构造函数。,23,构造函数(小结一),1、缺省构造函数,2、有特定初始化值的
10、构造函数,3、通过复制另一个对象建立新对象的构造函数,24,构造函数(小结二),1、构造函数没有返回类型,2、构造函数与类同名,3、同一个类可以有多个构造函数,25,构造函数(思考题),class Counter long value;public:Counter();class Example int value;public:Counter c;Example();,void main()Example e;,在本例中,当c对象作为e对象的成员。问:c对象和e对象的构造函数的调用顺序是怎样的?,26,析构函数,析构函数在对象不再被使用时,执行一些必须的操作,一般是构造函数的逆操作。一个类只
11、能声明一个析构函数。析构函数是构造函数的逆函数。,27,析构函数(续),class Counter long value;public:Counter();Counter:Counter()printf(“”);,析构函数在声明和使用上有什么特点?,28,析构函数(小结),1、析构函数没有返回类型,2、析构函数的命名是在类名前加“”,3、一个类只能有一个析构函数,4、析构函数没有参数,29,1.3继承性,从编码角度讲,从基类中派生类以较低代价换来了大量的灵活性。一旦产生了可靠的基类,只需要调试派生类中所做的修改即可。派生类从它的父类中继承性质时,可使派生类对它们进行扩展、限制、改变、删除或不做
12、任何修改。所有这些变化归结成两类基本的面向对象技术:性质约束和性质扩展。,30,单一继承,class First int value_1;protected:int value_2;public:int value_3;,class Second:First int value_4;public:void F2();,问:在程序中可以访问的Second类的对象的成员变量有那些?,31,基类存取限定符,class First int value_1;protected:int value_2;public:int value_3;,class Second:public First int va
13、lue_4;public:void F2();,基类存取限定符,32,基类存取限定符(续),private:如果没有特别说明,private是缺省的限定符。基类中所有可继承的成员在派生类中都变成私有的。public:基类中所有public成员在派生类中仍为public成员,,33,构造函数的调用,class A public:A();class B:public A public:B();,如果现在将类B实例化成一个对象,构造函数的调用情况会如何?,34,构造函数的调用(续),类实例化时,需要调用其构造函数。如果该类是派生类,必须调用其父类的构造函数,如果其父类也是派生出来的,重复该过程直至到
14、达非派生的基类。,35,析构函数的调用,析构函数的调用顺序与构造函数的调用顺序相反。,36,构造函数的参数传递,class A public:int va;A(int i)va=i;class B:public A public:int 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
15、*d1=new First;Second*d2=new Second;c1=c2;d1=d2;,如果这样则不行:c2=c1;d2=d1;,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(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 方案 理论

链接地址:https://www.31ppt.com/p-6435970.html