当前位置: 代码迷 >> 综合 >> C++学习笔记(Day5 第四章)
  详细解决方案

C++学习笔记(Day5 第四章)

热度:38   发布时间:2024-01-18 19:26:05.0

第四章学习内容

l  程序中的对象是现实中对象的模拟,具有属性和功能/行为;

l  抽象出同一类对象的共同属性和行为,形成类,对象是类的实例;

l  类将数据和处理数据的函数封装在一起,隐藏内部细节,提供对外访问接口;

l  定义对象时,可以通过构造函数进行初始化;

l  删除对象时,可以通过析构函数释放资源;

l  一个类的对象可以由其他类的对象组合而成,即类的成员可以是其他类的对象;

l  在这一章,我们还将学习结构体、联合体和枚举类。

面向对象程序设计的基本特点

抽象

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

n  先注意问题的本质及描述,其次是实现过程或细节。

n  数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。

n  代码抽象:描述某类对象的共有的行为特征或具有的功能。

n  抽象的实现:类。

l  抽象实例——钟表

n  数据抽象:

int hour,int minute,int second

n  代码抽象:

setTime(),showTime()

class  Clock {public:void setTime(int newH, int newM, int newS);void showTime();private:int hour, minute, second;};

封装

l  将抽象出的数据、代码封装在一起,形成类。

n  目的:增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。

n  实现封装:类声明中的{}

l  例:

class  Clock {public: void setTime(int newH, int newM, int newS);void showTime();private: int hour, minute, second;};

继承

l  在已有类的基础上,进行扩展形成新的类。

l  详见第7章

多态

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

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

l  实现:重载函数和虚函数——见第8章

类和对象的定义

l  对象是现实中的对象在程序中的模拟。

l  类是同一类对象的抽象,对象时类的某一特定实体。

l  定义类的对象,才可以通过对象使用类中定义的功能。

设计类就是设计类型

l  此类型的“合法值”是什么?

l  此类型应该有什么样的函数和操作符?

l  新类型的对象该如何被创建和销毁?

l  如何进行对象的初始化和赋值?

l  对象作为函数的参数如何以值传递?

l  谁将使用此类型的对象成员?

类定义的语法形式

class 类名称

{

   public:

                     公有成员(外部接口)

   private:

                      私有成员

   protected:

                      保护型成员

};

 

类内初始值

l  可以为数据成员提供一个类内初始值

l  在创建对象时,类内初始值用于初始化数据成员

l  没有初始值的成员将被默认初始化。

l  类内初始值举例

class Clock {

public:

   void setTime(int newH, int newM, int newS);

   void showTime();

private:

   int hour = 0, minute = 0, second = 0;

};

 

类成员的访问控制

l  公有类型成员

在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。

l  私有类型成员

在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。

如果紧跟在类名称的后面声明私有成员,则关键字private可以省略。

l  保护类型成员

与private类似,其差别表现在继承与派生时对派生类的影响不同,详见第七章。

对象定义的语法

l  类名  对象名;

l  例:Clock  myClock;

类成员的访问权限

l  类中成员互相访问

直接使用成员名访问

l  类外访问

使用“对象名.成员名”方式访问 public 属性的成员

类的成员函数

l  在类中说明函数原型;

l  可以在类外给出函数体实现,并在函数名前使用类名加以限定;

l  也可以直接在类中给出函数体,形成内联成员函数;

l  允许声明重载函数和带默认参数值的函数。

内联成员函数

l  为了提高运行时的效率,对于较简单的函数可以声明为内联形式。

l  内联函数体中不要有复杂结构(如循环语句和switch语句)。

l  在类中声明内联成员函数的方式:

将函数体放在类的声明中。

使用inline关键字。 

 例 4-1 钟表类

#include <iostream>
using namespace  std;
//类的定义
class Clock{
public://在类中说明函数原型void setTime(int newH = 0,int newM = 0,int newS = 0);void showTime();private:int hour, minute, second;
};
//在类外给出成员函数的实现
void Clock::setTime(int newH, int newM, int newS) {hour = newH;minute = newM;second = newS;
}
void Clock::showTime() {cout << hour << "." << minute << "." << second;
}
//对象的使用
int main() {Clock myClock;myClock.setTime(8, 30, 30);myClock.showTime();return 0;
}