知识点总结第四章 类与对象

Posted werol714

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识点总结第四章 类与对象相关的知识,希望对你有一定的参考价值。

  • 面向对象程序设计的基本概念和特征

抽象性:对对象进行概括,抽出一类对象的公共性质并加以描述的过程。【数据抽象、行为抽象】

封装性:将抽象得到的数据、行为、功能相结合,形成一个有机的整体。就是将数据与操作数据的函数代码进行有机结合形成“类”,其中的数据和函数都是类的成员。

   通过封装,对成员访问权限合理控制,使得不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序编写工作

继承性

多态性

  • 类的定义和实现

class  类名 
{
     public:
                公有成员(数据成员和函数成员)
     private:
                私有成员(数据成员和函数成员)
     protected:
                保护型成员(数据成员和函数成员)
};

其中,public成员是类与外部的接口。

举例:

技术分享图片

 

 

类的成员函数实现的一般语法形式(成员函数的实现写在类的定义外面的情形):

返回值类型 类名::函数成员名(形参列表)
{
    函数体
}

其中,双冒号称为二元作用域运算符。

举例:

技术分享图片

注意:

  关于类的成员数据

        ① 定义方法与普通变量相同,只是它必须被定义在类内部。

        ② 在类内部,成员数据只能被定义,但不能被初始化。

关于类的成员函数

  如果在类内部仅声明函数原型,在类外部定义函数体,则必须使用二元作用域分辨符::

 

 声明内联成员函数:

方法1: 成员函数的函数体定义在类内部

技术分享图片

方法2: 使用关键字inline

技术分享图片

 

  • 对象的定义和使用

对象是类的实例。即,对象是类的变量。【关于对象的使用,可以参考结构体成员的使用。】

对象的定义:类名 对象名;

对象的使用:使用对象名.成员名的形式访问共有成员

技术分享图片

 

  • 类的构造函数和析构函数

构造函数:

介绍:① 是特殊的成员函数。 ② 用于在创建对象时为对象分配内存 ,并可以将其初始化到特定的状态。

性质:① 构造函数的函数名与类名相同

  ② 构造函数无返回值,所以不能设定返回类型,即使是void也不可以。

  ③ 构造函数是在创建对象时由编译器自动调用的。

  ④ 构造函数可以是内联函数、重载函数或带默认形参值的函数。

举例:

①用户未定义构造函数的情形:

技术分享图片

技术分享图片

main函数中定义对象时,系统隐含调用了默认的构造函数。但,只能完成内存分配,却无法进行初始化。

 

②用户定义一个不带参数的构造函数:

技术分享图片

技术分享图片

在main函数中定义对象时,系统隐含调用了用户自定义构造函数。

 

③用户定义一个带参数的构造函数

技术分享图片

技术分享图片

实际定义对象时,也要带有参数,否则,编译系统报错。

 

④用户定义一个带默认形参值的构造函数:

技术分享图片

技术分享图片

在main函数中,定义myclock时使用用户给的实参完成初始化。 定义hisclock时使用构造函数中默认形参值进行初始化。

 

⑤展示构造函数是被编译系统自动调用的:

技术分享图片

技术分享图片

main函数中定义对象时,主函数中并没有显式调用构造函数的代码。 但运行截图可见,构造函数中的提示被输出了。

 

⑥构造函数的重载

技术分享图片

技术分享图片

编译器根据创建对象时实参情况,自动调用最佳匹配的构造函数。

定义myclock处,编译器自动调用不带参数的构造函数;

定义hisclock处,编译器自动调用带参数的构造函数。

技术分享图片

main函数中,

定义myclock处,存在歧义。 编译器无从选择哪一个为最佳匹配的构造函数。

定义hisclock 处,编译器根据创建对象时实参情况,自动调用最佳匹配的构造函数,即带参数的构造函数。

 

注意:

① 在一个类的定义中,可以包含多个构造函数。这些构造函数有相同的函数名称,但具有不同的形参列表

② 定义对象时,编译器会根据参数的个数、类型来决定调用哪一个重载构造函数。

③ 当重载不带参数的构造函数和带默认形参值的构造函数时,程序可能会产生二义性。因此,在实际编程中应避免这一情形。

 



以上是关于知识点总结第四章 类与对象的主要内容,如果未能解决你的问题,请参考以下文章

第三周学习java第四章学习总结及体会!

Atitit 编程语言知识点tech tree v2 attilax大总结

杨玲 201771010133《面向对象程序设计(java)》第五周学习总结

王艳 201771010127《面向对象程序设计(Java)》第四周学习总结

20165330 2017-2018-2 《Java程序设计》第3周学习总结

20145233韩昊辰 第三周总结