郑莉C++教程速成笔记——类与对象

文章目录

  • 面向对象的编程特点
    • 抽象
    • 封装
    • 继承
    • 多态
  • 类和对象的定义
    • 为数据成员设置类内的初始值,用于初始化数据成员
    • 类成员的访问控制
      • 公有类型成员
      • 私有类型成员
      • 保护类型成员
    • 对象的定义语法
    • 类的成员函数
      • 内联成员函数
      • 例子
    • 构造函数
      • 作用
      • 形式
      • 调用时机
      • 默认构造函数
      • 隐含生成的构造函数
      • 构造函数写法
      • 一般来讲,都要为类写一个默认的构造函数,因为其他人使用时可能不会给初始值
    • 委托构造函数
    • 复制构造函数
      • 复制构造函数被调用的三种情况
      • 隐含的复制构造函数
    • 析构函数
    • 类的组合
    • 前向引用声明
      • 前向引用声明注意事项
    • UML简介
    • 结构体
      • 结构体的定义
      • 结构体初始化
    • 联合体
      • 定义形式
    • 枚举类
      • 枚举类的优势:

面向对象的编程特点

定义对象要通过构造函数初始化
删除对象要通过析构函数释放资源
在C++中,类定义就是一个声明语句,后面要加“;”,这点和python不同。C++的类内函数一般在类定义外面实现,类型名用类名限定,在类定义里面声明函数原型。

抽象

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

  • 首先注意问题的本质及描述,其次是实现过程或细节
  • 数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)
  • 代码抽象:描述某类对象的共有行为特征或具有的功能
  • 抽象的实现:类

抽象实例——钟表

  • 数据抽象:
    • int hour, int minute, int second
  • 代码抽象:
    • setTime(), showTime()
class Clock{
   
	public:
	volid setTime(int newH, int newM, int newS);
	voild showTime();
	private:
	int hour, minute, second;
};

封装

  • 将抽象出的数据成员、代码成员相结合,将它们视为一个整体。

    • 目的:增强安全性和简化编程,使用者不必了解具体细节,而只需通过外部接口,以待定的访问权限,来使用类的成员
    • 实现封装:类声明中的{}

    public就是类的对外访问接口
    private被隐藏在类的内部,外部看不到
    郑莉C++教程速成笔记——类与对象_第1张图片

继承

  • 在已有类的基础上,进行扩展形成新的类。
  • 详见第7章

多态

  • 多态:统一名称,不同的功能实现方式
  • 目的:达到行为标识统一,减少程序中标识符个数
  • 详见第8章

类和对象的定义

设计类就是设计类型

  • 此类型的“合法值”是什么?
  • 此类型应该有什么样的函数和操作符?
  • 新类型的对象该如何被创建和摧毁?
  • 如何进行对象的初始化和赋值?
  • 对象作为函数的参数如何以值传递?
  • 谁将使用此类型的对象成员?

郑莉C++教程速成笔记——类与对象_第2张图片

为数据成员设置类内的初始值,用于初始化数据成员

class Clock{
   
   public:
   volid setTime(int newH, int newM, int newS);
   voild showTime();
   private:
   int hour = 0, minute = 0, second = 0; //类内初始值
};

类成员的访问控制

  • 公有类型成员
  • 私有类型成员
  • 保护类型成员

公有类型成员

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

私有类型成员

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

保护类型成员

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

对象的定义语法

类名 对象名;

例:
Clock myClock

类中成员之间直接使用成员名互相访问
从类外访问成员使用“对象名.成员名”方式访问public成员

类的成员函数

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

内联成员函数

  • 为了提高运行效率,对于较简单的函数可以声明为内联函数
  • 内联函数体中不要有复杂的结构,如循环和switch语句
  • 在类中声明内联成员函数的方式:
    • 将函数体放在类的声明中
    • 使用inline关键字

例子

#include 
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<<endl;
}

int main(){
   
    Clock myClock;
    myClock.setTime(8,30,30);
    myClock.showTime();
    system("pause");
    return 0;

你可能感兴趣的:(C++,编程语言,c++)