第三次课后作业 1.面向对象程序设计语言 比较分析C++、Java、 Python、R语言的面向对 象特征,这些特征如何实现的?有什么相同点?
第三次课后作业 1. 面向对象程序设计语言 – 比较分析C++、Java、Python、R语言的面向对 象特征,这些特征如何实现的?有什么相同点?
1.C艹+语言的面向对象特征 1.对象模型:封装 (1)访问控制机制: C艹+提供完善的访问控制机制,分别是: public protected和 private。 表1 private, public, protected访问标号的访问范围 private, public, protected访问标号的访问范围 public可访问 1该类中的函数;2.子类的函数; 3其友元函数访问;4该类的对象访问; 可访问 1该类中的函数;2子类的函数; protecte 3其友元函数访问; 不可访问1该类的对象访问; 可访问 1该类中的函数;2其友元函数访问; private 不可访问1.子类的函数;2该类的对象访问
1. C++语言的面向对象特征 1. 对象模型:封装 – (1) 访问控制机制: – C++提供完善的访问控制机制,分别是: public, protected和private。 private, public, protected 访问标号的访问范围 public 可访问 1.该类中的函数; 2.子类的函数; 3.其友元函数访问;4.该类的对象访问; protected 可访问 1.该类中的函数;2.子类的函数; 3.其友元函数访问; 不可访问 1.该类的对象访问; private 可访问 1.该类中的函数;2.其友元函数访问; 不可访问 1.子类的函数;2.该类的对象访问; 表1 private, public, protected 访问标号的访问范围
1.C艹+语言的面向对象特征 class Base protected privat nt prl 1 nt pub mem Base(int y, int m, int d): pub mem(y), pro mem (m), pri_ mem(d)0 class Pub Son: public Base public Pub Son(int a, int b, int c): Base(a, b, c) /合法,输出10 d f1 o << pub mem < endl Base b2(40,50,60); cout b2 pub mem < endl //非法,派生类的对象不能访问继承来的保护成员 cout < b2 pro mem < endl /合法,输出10 void f2 cout < pro mem < endl /非法,派生类不能访问继承来的私有成员 id f30 cout < pri n
1. C++语言的面向对象特征
1.C艹+语言的面向对象特征 1.对象模型:封装 (2)对象的独立性: -C++中对象本身不具有独立性,也就是对象 必须属于某一个类; 3)类本身是不是对象? C++中类本身不是对象,对象是类的实例化; (4)基于类的模型,还是基于对象或原型的模型? C++是基于类的模型
1. C++语言的面向对象特征 1. 对象模型:封装 – (2) 对象的独立性: – C++中对象本身不具有独立性,也就是对象 必须属于某一个类; – (3) 类本身是不是对象? – C++中类本身不是对象,对象是类的实例化; – (4) 基于类的模型,还是基于对象或原型的模型? – C++是基于类的模型;
1.C艹+语言的面向对象特征 1.对象模型:继承 (1)类层次结构:采用单根的类层次结构,还是任意的 类层次结构? C++采用任意的类层次结构 ②2)继承方式:提供哪些继承方式? C++采用三种继承方式,分别是 public继承, protected继承, private继承 表2类的继承方式 public protected private public继承 public protected 不可用 protected继承 protected protected 不可用 private继承 private private 不可用
1. C++语言的面向对象特征 1. 对象模型:继承 – (1) 类层次结构:采用单根的类层次结构,还是任意的 类层次结构? – C++采用任意的类层次结构; – (2) 继承方式:提供哪些继承方式? – C++采用三种继承方式,分别是public继承, protected继承,private继承; public protected private public继承 public protected 不可用 protected继承 protected protected 不可用 private继承 private private 不可用 表2 类的继承方式
1.C艹+语言的面向对象特征 1.对象模型:继承 (3)采用基于继承的模型,还是基于指派的模型? C++是基于继承的模型 (4)允许多重继承?还是只允许单继承? C++允许单继承、多继承、多重继承和虚继承; 日c1assA 在单继承中,每个类可以有 多个派生类,但是每个派生 类只能有一个基类,从而形lasB: publicA 成树形结构; 图1单继承实例
1. C++语言的面向对象特征 1. 对象模型:继承 – (3) 采用基于继承的模型,还是基于指派的模型? – C++是基于继承的模型 – (4) 允许多重继承?还是只允许单继承? – C++允许单继承、多继承、多重继承和虚继承; 在单继承中,每个类可以有 多个派生类,但是每个派生 类只能有一个基类,从而形 成树形结构; 图1 单继承实例
1.C艹+语言的面向对象特征 1.对象模型:继承 (4)允许多重继承?还是只允许单继承? C++允许单继承、多继承、多重继承和虚继 承 日 class farmer{ 曰 class Person{ 日 class Worker E class Soldier: public Person[ F class Migrant: public Farmer, public Worker[Eclass Infrantryman: public Soldier[ 图2多继承实例 图3多重继承实例
1. C++语言的面向对象特征 1. 对象模型:继承 – (4) 允许多重继承?还是只允许单继承? – C++允许单继承、多继承、多重继承和虚继 承; 图2 多继承实例 图3 多重继承实例
1.C艹+语言的面向对象特征 1.对象模型:继承 (4)允许多重继承?还是只允许单继承? C++允许单继承、多继承、多重继承和虚继 承 白 class A{ C++使用虚拟继承,解决从不 publiC: int a 同途径继承来的同名的数据 成员在内存中有不同的拷贝aB8: virtual public A 造成数据不一致问题,将共 同基类设置为虚基类 Eclass C: virtual public 图4虚继承实例
1. C++语言的面向对象特征 1. 对象模型:继承 – (4) 允许多重继承?还是只允许单继承? – C++允许单继承、多继承、多重继承和虚继 承; C++使用虚拟继承,解决从不 同途径继承来的同名的数据 成员在内存中有不同的拷贝 造成数据不一致问题,将共 同基类设置为虚基类。 图4 虚继承实例
1.C艹+语言的面向对象特征 1.对象模型:多态 多态:是指同样的消息被不同类型的对象接收 时导致不同的行为。 虚函数 类属 多态 模板函数 重载 同名函数
1. C++语言的面向对象特征 1. 对象模型:多态 – 多态:是指同样的消息被不同类型的对象接收 时导致不同的行为。 多态 类属 重载 虚函数 同名函数 模板函数
1.C艹+语言的面向对象特征 1.对象模型:多态 日 class base ublic. virtual void Printo[ (1)类属:虚函数 cout<<Base: Print("<endl class Derive: public Base publi virtual void Print Oq at<< D Printo"<<endl 用父类的指针指向其子 类的实例,然后通过父 F int mainO( 类的指针调用实际子类 Derive derive Base *pBase =&derive 的成员函数,这种技术 return 0 可以让父类的指针有“ 多种形态”; Ci- C Windows\system32\cmd.exe Derive:: Print() 请按任意键继续
1. C++语言的面向对象特征 1. 对象模型:多态 – (1) 类属:虚函数 用父类的指针指向其子 类的实例,然后通过父 类的指针调用实际子类 的成员函数,这种技术 可以让父类的指针有“ 多种形态”;