



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
说到面向对象的三大特性:封装性、继承性和多态性。那么我们先简单的了解一下三大特性:(1)封装性:封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。在C+中类中成员的属性有:public, protected, private,这三个属性的访问权限依次降低。(2)继承性:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。(3)多态性:多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。实现多态,有二种方式,覆盖,重载。覆盖,是指子类重新定义父类的虚函数的做法。重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。1、C+中空类默认产生哪些类成员函数?答案:对于一个空类,编译器默认产生4个成员函数:(1)默认构造函数(2)析构函数(3)拷贝构造函数(4)赋值函数2、结构是否可以有构造函数、析构函数及成员函数?如果可以,那么结构和类还有什么区别吗? 答案:区别是class中变量默认是private,struct中的变量默认是public。class继承默认是private继承,而struct继承默认是public继承。struct可以有构造函数、析构函数,之间也可以继承甚至是多重继承,等等。C+中的struct其实和class意义一样,唯一不同就是struct里面默认的访问控制是public,class中默认访问控制是private。C+中存在struct关键字的唯一意义就是为了让C程序员有个归属感,是为了让C+编译器兼容以前用C开发的项目。3、下面程序打印出的结果是什么?123456789101112131415#include using namespace std; class base private: int m_i; int m_j; public: base( int i ) : m_j(i),m_i(m_j) base() : m_j(0),m_i(m_j) int get_i() return m_i; int get_j() return m_j; ; int main () base obj(98); cout obj.get_i() endl obj.get_j() endl; return 0; 解析:本题想得到的结果是“98,98”。但是成员变量的声明是先 m_i ,然后是 m_j;初始化列表的初始化变量顺序是根据成员变量的声明顺序来执行的,因此,先初始化 m_i,但此时 m_j 还未初始化,m_i 会被赋予一个随机值。改变一下成员变量的声明顺序可以得到预想的结果。答案:输出结果第一个为随机数,第二个是98。4、下面这个类声明正确吗?为什么?1234class A const int Size = 0; ;解析:这道程序题存在着成员变量问题。常量必须在构造函数的初始化列表里初始化或者将其设置成static。答案:正确的程序如下:1234567class A A() const int Size = 1; ;或者:1234class A static const int Size = 1; ;5、析构函数可以为 virtual 型,构造函数则不能,为什么?答案:虚函数采用一种虚调用的办法。虚调用是一种可以在只有部分信息的情况下工作的机制,特别允许我们调用一个只知道接口而不知道其准确对象类型的函数。但是如果要创建一个对象,你势必要知道对象的准确类型,因此构造函数不能为 virtual。6、如果把类成员函数都声明为虚函数有什么不好?答案:不行,这是因为虚函数是有代价的:由于每个虚函数的对象都必须维护一个 v 表,因此在使用虚函数的时候会产生一个系统开销。如果仅是一个很小的类,且不行派生其他类,那么根本没必要使用虚函数。7、请看下面一段程序:1234567891011121314151617181920212#include using namespace std; class B private: int data; public: B() coutdefualt constructorendl; B() coutdestructed endl; B( int i) : data(i) coutconstructed by parameterdataendl; ; B Play( B b ) return b; int main () B temp = Play(5); return 0; 问题: (1)该程序输出结果是什么?为什么会有这样的输出? (2)B( int i ) : data( i ),这种用法的专业术语叫什么? (3)Play( 5 ),形参类型是类,而5是个常量,这样写合法吗?为什么?答案:(1)输出结果如下:123constructed by parameter/在Play(5)处,5通过隐含的类型转换调用了B:B( int i ) destructed /Play(5) 返回时,参数的析构函数被调用 destructed /temp的析构函数被调用;temp的构造函数调用的是编译器生存的拷贝构造函数(2)待参数的构造函数,冒号后面的是成员变量初始化列表(member initialization list)(3)合法。单个参数的构造函数如果不添加explicit关键字,会定义一个隐含的类型转换;添加explicit关键字会消除这种隐含转换。8、编写类 String 的构造函数、析构函数和赋值函数。 已知类 String 的原型为:12345678910class String public: String(const char *str = NULL); /普通构造函数 String(const String &other); /拷贝构造函数 String(void); /析构函数 String & operate =(const String &other); /赋值函数 private: char *m_data; /用于保存字符串 ;答案:1、 String 的析构函数:1234String:String(void) delete m_data; 2、String 的构造函数:123456789101112String:String(const char *str) if(NULL=str) m_data = new char1; *m_data = 0; else int length = strlen(str); m_data = new charlength+1; strcpy(m_data,str); 3、String的拷贝构造函数:123456String:String(const String &other) int length = strlen(other.m_data); m_data = new charlength+1; strcpy(m_data,other.m_data); 4、String的赋值函数:123456789101112String & String:operate =(const String &other) if(this= &other) /检查自复制 return *this; delete m_data; /释放原有的内存资源 int length=strlen(other.m_data); /分配新内存资源,并复制内容 m_data = new charlength+1; strcpy(m_data,other.m_data); return *this; /返回本对象的引用 9、重载与覆盖有什么不同?答案: 虚函数总是在派生类中被改写,这种改写被称为“override”(覆盖)。 override 是指派生类重写基类的虚函数,重写的函数必须有一致的参数表和返回值。Override这个单词好像一直没什么合适的中文词汇来对应。有些人译为“覆盖”,还贴切一些。 overload约定成俗地被翻译为“重载”,是指编写一个与自己已有函数同名但是参数表不同的函数。例如一个函数既可以接受整型数作为参
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版卫星通信系统建设项目合同
- 2025版工业自动化控制系统设备监造与维护合同
- 2025年度网络安全产品保密协议范本
- 2025建筑工程劳务合同样本
- 2025年私人住宅渗水修复合同协议
- 2025企业合同管理指南合同履行与监督实施细则文档模板
- 语文专业知识培训心得
- 红色船员基础知识培训课件
- 红色家书课件带稿
- 企业资产保理融资合同
- GB/T 5907.4-2015消防词汇第4部分:火灾调查
- GB 31701-2015婴幼儿及儿童纺织产品安全技术规范
- 健身理论与指导课件讲义
- 浙江省科学作业本2022版四年级上册作业本参考答案
- 2023年中远海运船员管理有限公司招聘笔试题库及答案解析
- 美国共同基金SmartBeta布局及借鉴
- 企业劳动用工法律风险与防范
- 普通逻辑ppt课件(完整版)
- 2022年08月安徽省芜湖市招考大学生科技特派员岗位冲刺题(带答案)
- 国家城镇救援队伍能力建设与分级测评指南
- DB32∕T 4065-2021 建筑幕墙工程技术标准
评论
0/150
提交评论