C++学习笔记——类和对象(今天是521,你有对象了吗)(一)


这一章开始进入真正OOP的世界,刚刚接到期末考试通知心里很慌,发现自己好多东西还没学会,趁晚上睡不着开始复习,希望这次考试考好(然后可以去看小鬼的演唱会)

  • 回顾:
    程序=算法+数据结构
    程序=函数+数据
    为什么控制和数据要分离,如果我们将其统一呢?

对象:对现实生活中对象的抽象,具有属性和行为,我们对具有相似属性和行为的对象进行抽象就形成了类,对象是类的实例
类:对一类对象的封装,提供对外接口,隐藏内部细节,创建类时需要使用构造函数,删除类时需要用到析构函数,还可以将类进行组合

面向对象程序

过程性编程和面向对象编程

  • 什么是过程?什么是面向对象?
    如果我们要设计程序统计每个达琳的信息,当我是面向过程设计,我就会先考虑如何联系到每个鬼姐姐,如何获取这些数据,以什么样的形式展示,然后再考虑需要有哪些数据,应该如何存放。面向对象就是考虑到每个鬼姐姐应该有哪些数据,如何使用,再考虑如何设计界面,如何获取的问题,面向对象更符合我们解决问题的常规思路
    😈
    抽象,封装,继承,多态
  • 抽象:具体问题→公共性质
    找出本质特征(类似于语文中的借代)然后针对这一特征找出解决方法
  1. 代码抽象:功能和行为
  2. 数据抽象:属性和状态的抽象
    如何实现抽象呢?类的声明!
  3. 什么是类型?
    在现实生活中我们会对事物进行分类,计算机中同样如此,数据的分类(根据存储方式,计算特点等)默认了对数据操作方法
  4. 类:对同一类对象的共同属性和行为进行概括,形成类,包括类的声明和类方法定义,类声明是蓝图,方法定义了细节
    举例:钟表
    数据抽象 int hour,int minute,int second
    代码抽象 setTime(),showTime()
class Clock {
public:
	void setTime(int newH, int newM, int newS);
	void showTime();
private:
	int hour, minute, second;
};

补充:什么是接口?黑盒子内部我们不知道,我们只能通过外部的窗口直接使用他(如通过调用公共的函数等等)

  • 封装:将抽象的数据和代码形成一个类
    目的:增强安全性,使用者不必了解具体的细节,只需要通过访问接口和特定的权限使用类的成员,通过类声明中的{}实现
class Clock {
public://访问权限
	void setTime(int newH, int newM, int newS);//对外访问接口
	void showTime();
private://访问权限
	int hour, minute, second;
};

数据和行为的声明都叫做类的成员,通过修改类的成员,改变外部可访问性,增强数据安全和类之间的相互关系

  • 继承 在已有类的基础上进行扩展,有利于代码重用
  • 多态:同一名称,不同的功能实现
    类似于函数重载

类和对象

概述:同类型对象的集合,通过具体的对象实现类的功能。
起初使用函数抽象时,只是对行为进行了抽象,类对行为和数据都进行了抽象,抽象层次更高,更适合大型软件开发
型和值的概念:型对值进行了限制,限制了运算和数据类型,说明数据类型包含了数据的属性和对数据的操作
自定义类型实际上就是一种类

  • 类的实例化

  • 类的定义
class 类名称
{
public:(外部接口)
private:
protected:

注意:只需要声明函数原型,函数体在类外定义
类定义一般分为说明部分和实现部分(实现部分是函数的定义)

  • 类成员的访问控制
    ①公有成员:任何外部成员都可访问,是对外部的接口
    ②private:对外屏蔽,只允许本类中函数访问,类外部函数不能访问(可以通过某种方法进行授权,即可访问),如果紧跟class声明后面定义属性和行为,则默认为private(一般内部数据都被定义为私有类)
    ③protected(继承部分介绍)
    成员数据赋值
    类内初始值
    private: int hour=0, minute=0, second=0;
    创建对象时,如果没有构造函数,就会按照类内初始值的定义对对象相关的值进行赋值
  • 类的成员函数:对类对象行为的描述
    1 成员函数的实现
    原型声明在类体中,函数定义在类之外,要指明类的名称,也可以直接在类中给出,形成内联函数。
void Class::setTime(){}

(需要用类名来限制函数)
2 目的对象:myClock::setTime();
3 也可以在类内给出函数体,形成内联成员函数(简单的函数)
4 允许重载函数和带默认值的函数

#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(12, 36, 2);
	myClock.showTime();
	return 0;
}

5 内联函数
隐式定义和显式定义

对象:对现实对象的模拟

  • 对象的定义类名 对象名
Clock myClock;

2.类的成员间可以互相访问
3.类外访问类的成员,需要通过对象访问
对象名.成员名(仅限于public)
4.a=b;实现对象b的属性全部赋值给a
一般来说会选择把数据类型的变量改为private型,一般定义一个getNum的函数去访问变量。
不要让类太复杂,模块化设计才是宗旨

这篇先写到这,随后根据cpp增加内容

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值