【C++】2.面向对象思想

本文详细介绍了面向对象编程的概念,包括面向过程与面向对象的区别,类与对象的关系,以及如何使用String类。文章通过实例阐述了面向对象编程的优势和面向过程的局限性,强调了封装、继承、多态等特性。
摘要由CSDN通过智能技术生成


2.0概要

学习目的:

  1. 明确面向过程和面向对象的区别。
  2. 掌握面向对象的编程思想。
  3. 掌握类和对象的关系。

课程内容:

  1. 回顾总结面向过程。
  2. 全面了解面向对象。
  3. 3.深入学习类与对象。
  4. 学会使用String类。

重点难点:

  1. 面向对象思想。
  2. 使用String类。

2.1面向过程

  1. 是什么?

  2. 优缺点?

面向过程:提出问题–>分析问题–>处理问题(把一个大问题分解成多个小问题)

面向过程简单,好用,但是不安全,不适合大项目。


2.2面向对象

面向对象的程序设计是面向过程的继承和发展。

面向对象可以理解为:现实世界是由对象组成的。

对象在程序中抽象为两个部分:属性(数据),行为(函数)

类:具有相同类型的属性组成的集合。

实例化:从种类具体到某个个体的过程。

先通过类来实例化一个对象,通过这个对象就可以解决这个问题。


面向对象编程:其实很多学习编程的人,对于面向过程编程和面向对象编程这两个概念总是搞不清,具体的专业的定义在这里也不去说了,根据上面的叙述,我们可以这样去通俗的解释面向对象。

举个例子:我去洗澡。

如果按照面向过程的角度考虑,那么我先进入浴室,然后打开水龙,然后洗漱,然后把身体擦干,也就是说面向过程关注的是解决问题的步骤

如果用面向对象考虑,只需记住一句话,万物皆对象,你是对象,水龙头也是对象,所以我先传递力的参数给浴室门,然后门就开了,然后我在传递消息给水龙头,水龙头得到消息,放水,最后传递消息给毛巾,毛巾利用它吸水的特性,调用吸水方法擦干身体。

也就是说面向对象关注的是对象,将一个问题拆分为不同对象,依靠参数完成对象之间的交互

为什么要进行面向对象编程?这也是一个很值得思考的问题。举个例子,活字印刷术发明之前使用的是雕版印刷,这种方式弊端太大,如果需要改稿,那么雕版就必须重新雕刻,而活字印刷术则解决了这样的问题,需要改动,有可能只需改动几处。面向过程正如雕版印刷一样,也正如做数学题一样,中间某个环节一旦出现需求变更,那么整个工程几乎需要大改,要耗费大量时间精力。面向对象正如活字印刷术一样,如果需求变化了,可能只是修改其中一部分,也就是一个对象,而且最关键的一点是这些对象可以服用,进行活字印刷术一样,不是说这个对象在这个工程中发挥完之后,它就没有价值了,它还可能被其他工程所用。


面向对象特点:

  1. 会把属性和行为总结到一起,用来表达你所创建的对象。
  2. 面向过程里面属性和行为是分开的,问题比较复杂就可能会丢失数据,或者出现错误的值,导致程序的维护比较困难,但是面向对象可以把这个问题解决掉。把问题分解成为一个个对象可以解决的问题。

面向对象特性:

  1. 封装:把东西藏起来
  2. 继承:子承父业
  3. 多态:不同情况干不同的事情
  4. 抽象:把对象提取出一些大家都有的属性和行为。(抽象后把这些东西融合到一起就变成了一个类)
  5. 重用:重复利用

  1. 多线程:从软件或者硬件上实现多个线程并发执行的技术

  2. 低耦合:互相之间不怎么影响。

  3. 高内聚:不会影响到别的。

  4. 组件编程:不同组件组合到一起,实现丰富的功能。

  5. 代码托管:执行过程交由运行时管理的代码。

  6. 适配器模式:允许将一个接口转换为客户希望的另一个接口,目的是使原本由于接口不兼容而无法一起工作的类能够协同工作。


2.3类与对象

类是一种用户自定义的数据类型(函数,数据)

类是具有相同的属性和行为的对象的集合。

类是对象的抽象,对象是类的具体。

对象:通过使用类类型定义的变量。

1.定义类

//语法
class {                  //类名
    //默认是私有的
    //成员:1.数据 2.函数

//访问权限修饰关键字
public:                  //公有的
    //成员:1.数据 2.函数
private:                 //私有的
    //成员:1.数据 2.函数
protected:               //被保护的
    //成员:1.数据 2.函数
};

在这里插入图片描述


#include <iostream>
using namespace std;
class Sheep {
public:
    char name[32];
private:
    int age;

public:
    void eat() {
        cout << "闲着也是闲着,简单吃点草" << endl;
    }
    void setAge(int n) {
        age = n;
    }
    void speak();
private:
    void speakEnglish() {
        cout << "My name is" << name << ",I'am" << age << "。" << endl;
    }
};

void Sheep::speak() {
    cout << "我叫" << name << ",我" << age << "岁了。" << endl;
}

int main() {
    Sheep xiYY;
    //xiYY.name = "喜羊羊";<------------这个是错误的
    strcpy(xiYY.name, "喜羊羊");//xiYY.name是字符串类型,所以 要用strcpy函数,而不是像上面一样。
    //xiYY.age = 10;<-------------------这个也不行,因为age是私有属性,私有属性外面不能直接访问。
    xiYY.setAge(12);
    xiYY.speak();
    return 0;
}

在这里插入图片描述


Sheep* pY;
pY->eat();

这么写是有问题的。因为在这里这个指针没有具体指向,也就是说这个指针4个字节,没有指向。

Sheep* pY;

pY = &xiYY;需要先给这个指针一个首地址,然后再去用。

pY->eat();

C++里面指针要用->而不是.

对象用.


C++里面struct和class的区别:

  1. C++里面可以用struct和class来声明一个类。
  2. C++里面可以用struct去声明结构体。
  3. 面向对象就用class来定义类,struct来 定义结构体。(因为用class来定义的类权限是私有的,用struct定义的类权限是公有的)

2.4String类

String是C++中的字符串

类似于C语言中的字符数组

其中包括许多方法,使用时需要额外包含<string>

#include<string>

C++里面使用的是#include<string>而不是#include<string.h>,但是用了后者也没事,因为C++是兼容C语言的。

string使用:

#include <string>

class Sheep {
public:
    char name[32];
    string name_str;
};

int main() {
    string str;
    str = "abc123";
    char ch = str[2];
    str.length();//统计str长度
    str.clear();//清理str
    str.empty();//是否为空,空就false,非空就true
    str == str;//比较两个字符串

    Sheep xiYY;
    xiYY.name_str = "xiyy";
    cout << xiYY.name_str << endl;
    return 0;
}
  • 28
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值