造“地基”的C++ (四)类与对象

C++之类与对象

内联函数:具有一般函数的特性,他与一般函数不同之处只在于函数调用的处理。一般函数进行调用时要将程序执行权转到被调用函数中,然后在返回调用他的函数中;而内敛函数在调用时,是将调用表达式用内联函数体来替换。

 

面向对象的程序特点:抽象、封装、继承 、多态

抽象:对同一类对象的共同属性和行为进行概括,形成类

封装 :将抽象出的数据成员、代码成员相组合,将他们视为一个整体

继承:在已有类的基础上进行扩展形成新的类

多态:同一名称,不同功能的实现方式

多态的目的:达到行为标识统一,减少程序中标识符的个数

 

类定义的语法形式:

Class 类名称

{

Public :  //公有成员,外部接口

Private:  //私有成员

Protected://保护型成员

};

 

公有类型成员:在关键字public后面申明,他们是类与外部的接口,任何外部函数都可以访问共有类型数据和函数

私有类型成员:在关键字private后面申明,只允许本类中的函数访问,而类外部的任何函数都不能访问。  如果紧跟在类名称的后面申明私有成员,则关键字private可以省略

保护类型成员:与private类似,其差别表现在继承与派生类时对派生类的影响不同

 

类的成员函数:

  1. 在类中申明函数原型
  2. 可以在类外给出函数体实现,并在函数名前使用类名加以限定
  3. 也可以在类中直接给出函数体,形成内联成员函数
  4. 允许申明重载函数和带默认值参数的函数

 

构造函数:

  1. 类中特殊的函数
  2. 用于描述初始化算法(定义如何去初始化对象)

 

构造函数的形式:

  1. 函数名必须与类名相同
  2. 不能定义返回值类型,也不能有return语句
  3. 可以有形参,也可以没有
  4. 可以是内联函数
  5. 可以重载
  6. 可以带默认参数值

 

构造函数的调用时机:
在对象创建时被自动调用      例: Clock myClock (0,0,0)

 

默认构造函数:

调用时可以不需要实参的构造函数(1,参数表为空的构造函数   2,全部参数都有默认值的构造函数)

 

隐含生成的构造函数:

如果程序中未定义构造函数,编译器将自动生成一个默认构造函数

*参数列表为空,不为数据成员设初始值

*如果类内定义了成员的初始值,则用此初始值

*基本类型的数据默认初始化的值是不确定的

 

复制构造函数定义:

* 复制构造函数是一种特殊的构造函数,其形参为本类的对象引用,作用是将已存在的对象去初始化同类型的新对象。

* class 类名 {

Public :

类名 (形参);  //构造函数

类名  (const 类名 &对象名); //复制构造函数

...

}

类名::类(const 类名 &对象名) //复制构造函数的实现

{ 函数体}

 

复制构造函数被调用的三种情况:

  1. 定义一个对象时,以本类的另一个对象作为初始值,发生复制构造
  2. 如果函数的形参是类的对象,调用函数时,将使用实参对象初始化形参对象,发生复制构造
  3. 如果函数的返回值是类的对象,函数执行完返回主调函数时,将使用return语句中的对象初始化一个临时无名对象,传递给主调函数,此时发生复制构造

 

析构函数完成对象被删除前的一些清理工作

在对象生存期结束的时刻,系统会自动调用析构函数

如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数,其函数体为空

 

*析构函数的原型    ~类名 ();

*析构函数没有参数、没有返回类型,当然也不允许有return语句

*析构函数的实现     类名::~类(){  };

 

语法要求:构造对象的时候必须需要一个构造函数,删除对象的时候必须需要一个析构函数

类的组合:

  • 概念:
  1. 类中的成员是另一个类的对象
  2. 可以在已有抽象的基础上实现更复杂的抽象
  • 类组合的构造函数设计
  1. 原则:不仅要负责对本类对象成员的数据初始化,也要对对象成员初始化
  2. 声明形式:

类名::类名(对象成员所需要的形参,本类成员形参):对象1(参数),对象2(参数),......

{

//函数体其他语句

}

 

 

前向引用申明:

  1. 类应该先申明后使用
  2. 如果需要在某个类的声明之前,引用该类,则应进行前向引用申明
  3. 前向引用申明只为程序引入一个标识符,具体申明在其他地方

 

例如:

Class B ;  //前向引用申明

Class A {  public : void f(B b); };

Class B{  public : void g (A a); };

 

结构体:

  1. 结构体是一种特殊形态的类
  2. 与类的唯一区别

  *类的缺省访问权限是private     *结构体的缺省访问权限是public

 

枚举类:

  1. 语法形式:enum class 枚举类型名 : 底层类型 {枚举值列表}

例子:

      Enum class Type {G, L,M,H};

      Enum class Type : char {G, L,M,H};

      Enum class Great{G = 1, L,M,H};

  1. 枚举类的优势:
    *强作用域:其作用域限制在枚举类中

例子:使用Type的枚举值G :           Type::G

*转换限制:枚举对象不能与整型隐性的相互转换

*可以指定底层类型

 

当组合类中,执行构造函数的时候,内嵌对象首先被创建!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值