C++深入讲解类与对象之OOP面向对象编程与封装

C++深入讲解类与对象之OOP面向对象编程与封装攻略

什么是OOP面向对象编程?

OOP,全名是Object-Oriented Programming,中文翻译是面向对象编程,它是一种编程方法论和编程思想,其核心思想是将一组数据结构和处理它们的方法组成对象,以及描述对象间的相互关系,实现数据封装,代码重用和灵活性等特性。

OOP面向对象编程实现了三个基本特性:封装、继承和多态。通过这些特性,OOP提供了一种更加清晰、灵活和易于维护的编程方式。

在C++中,我们可以使用类和对象实现面向对象编程。

什么是类与对象?

在C++中,类被用来描述相似的对象,而对象表示类的实例。类可以被看作是一种模板,用于创建对象。从一个类可以创建一个或多个对象。

类由以下部分组成:

  • 成员变量:用于表示对象的各种属性。
  • 成员函数:用于完成对对象的各种操作。

对象是类的一个实例。当定义一个类时,只是定义了一个模板,而对象是根据这个模板创建的,包含实际的数据。

封装

封装是OOP的一个重要特性,它将数据和行为组合在一起,形成一个有机的整体。封装隐藏了对象内部的复杂性,使得在外部只能访问对象的公共成员函数,而不能访问其私有成员变量和函数。

在C++中,我们使用关键字privatepublic来封装类的成员变量和成员函数。其中private表示私有成员,只能在类内访问,而public表示公共成员,可以在类内和类外访问。

下面是一个封装示例:

#include <iostream>

using namespace std;

class Students {
private:
    string name;
    int age;

public:
    void setName(string s) {
        name = s;
    }

    void setAge(int a) {
        age = a;
    }

    string getName() {
        return name;
    }

    int getAge() {
        return age;
    }
};

int main() {

    Students john;
    john.setName("John");
    john.setAge(20);

    cout << "Name: " << john.getName() << endl;
    cout << "Age: " << john.getAge() << endl;

    return 0;
}

在上面的示例中,我们定义了一个Students类,并将其成员变量nameage标记为私有变量,这样外部无法直接访问这两个变量。然后,我们定义了四个成员函数setNamesetAgegetNamegetAge,分别用来设置和获取nameage的值,并将其标记为公共成员,这样外部可以通过这四个函数访问类的私有成员变量。最后,在main函数中,我们实例化了一个对象john,并使用setNamesetAge函数分别设置其名字和年龄,并使用getNamegetAge函数来获取其名字和年龄并输出。

继承

继承是OOP的另一个重要特性,它允许我们在一个已存在的类的基础上构建一个新的类。新的类被称为派生类,已存在的类被称为基类。派生类继承了基类的所有成员,包括成员变量和成员函数,并可以添加新的成员。

在C++中,我们使用关键字class:来定义派生类,:后面的公共、保护和私有用来指定成员的访问级别,公共成员在派生类和外部都可以访问,保护成员在派生类中可以访问,但在派生类外部无法访问,私有成员在派生类和外部都无法访问。

下面是一个继承示例:

#include <iostream>

using namespace std;

class Person {
protected:
    string name;
    int age;

public:
    void setName(string s) {
        name = s;
    }

    void setAge(int a) {
        age = a;
    }

    string getName() {
        return name;
    }

    int getAge() {
        return age;
    }
};

class Student : public Person {
private:
    int score;

public:
    void setScore(int s) {
        score = s;
    }

    int getScore() {
        return score;
    }
};

int main() {

    Student john;
    john.setName("John");
    john.setAge(20);
    john.setScore(90);

    cout << "Name: " << john.getName() << endl;
    cout << "Age: " << john.getAge() << endl;
    cout << "Score: " << john.getScore() << endl;

    return 0;
}

在上面的示例中,我们定义了一个基类Person,派生类Student继承了基类Person的所有成员,包括成员变量nameage以及成员函数setNamesetAgegetNamegetAge,并添加了一个成员变量score以及成员函数setScoregetScore。在main函数中,我们实例化了一个对象john,并使用setNamesetAgesetScore函数分别设置其名字、年龄和分数,并使用getNamegetAgegetScore函数来获取其名字、年龄和分数并输出。

总结

本文介绍了C++中面向对象编程的基本概念,包括类、对象、封装和继承。通过示例代码,演示了如何使用C++实现面向对象编程中的封装和继承,希望读者能够了解并掌握面向对象编程的基本思想和C++中的面向对象编程的基本语法。

示例1:https://github.com/Sherlen/weblearn/tree/main/Cplusplus/oop_encapsulation

示例2:https://github.com/Sherlen/weblearn/tree/main/Cplusplus/oop_inheritance

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++深入讲解类与对象之OOP面向对象编程与封装 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案

    Python对任意数据和曲线进行拟合并求出函数表达式有以下三种常见的解决方案: 多项式拟合: 多项式拟合是一种最简单的拟合方法,其实现思路是在已有的数据点上,通过构建一个多项式,来逼近已知的函数。在Python中,使用numpy库中的polyfit函数来实现多项式拟合。具体步骤如下: import numpy as np import matplotlib.…

    C 2023年5月22日
    00
  • C语言将24小时制转换为12小时制的方法

    下面是“C语言将24小时制转换为12小时制的方法”的完整攻略。 核心思路 我们可以通过判断输入的小时数是上午还是下午,然后将其转换为12小时制,并输出结果。具体的思路如下: 读取用户输入的24小时制时间,并将其保存为一个整数,此处用变量hour表示。 如果用户输入的小时数在12小时之前,那么它就是上午时间,输出相应的12小时制时间和“AM”;如果用户输入的小…

    C 2023年5月23日
    00
  • c#多线程通信之委托事件

    本文介绍C#多线程通信之委托事件,主要包括以下几个部分: 委托和事件机制简介 C#多线程通信的方法 委托事件的使用示例 总结 1. 委托和事件机制简介 委托是一种类型,用于存储对某个方法的引用,可用于异步编程、事件处理、回调函数等场景。事件是一种机制,事件可以成为委托的订阅者,并在委托的调用过程中被自动调用。 使用委托和事件机制时,需要定义委托类型和事件类型…

    C 2023年5月22日
    00
  • C语言实现BF算法案例详解

    C语言实现BF算法案例详解 什么是BF算法 BF算法是一种简单的字符串匹配算法,它的全称为Brute Force算法,中文翻译为暴力匹配算法。该算法的思想是对匹配串中与主串中的字符逐一进行比较,直到匹配成功或者不匹配结束。 实现BF算法的步骤 步骤一:暴力匹配 我们可以从主串的第一个字符开始,每次匹配一个字符,直到匹配成功或者匹配失败为止。如果匹配成功,就继…

    C 2023年5月22日
    00
  • C++找出字符串中出现最多的字符和次数,时间复杂度小于O(n^2)

    题目描述 给定一个包含n个字符的字符串S,请你编写一个复杂度小于O(n^2)的算法,找出字符串S中出现最多的字符和次数。 思路分析 本题可以采用哈希表来实现。具体的做法是,在扫描整个字符串的过程中记录下每个字符出现的次数,然后遍历所有字符,找出出现次数最多的字符即可。 遍历字符串的时间复杂度为O(n),统计每个字符出现次数的过程为O(n),遍历哈希表找到出现…

    C 2023年5月22日
    00
  • iOS开发多线程下全局变量赋值崩溃原理详解

    我来为你详细讲解iOS开发多线程下全局变量赋值崩溃的原理及针对这一问题的解决方案。 1. 全局变量赋值崩溃原理 在iOS开发中,多线程操作是很常见的,而全局变量在多个线程之间共享,如果不加锁进行保护,就会导致数据的并发访问,进而引起各种问题,甚至崩溃。 具体来说,当多个线程同时对同一个全局变量进行写操作时,会出现数据竞争的情况。假设一个线程在写数据的同时,另…

    C 2023年5月22日
    00
  • 抖音蓝v认证有什么作用?抖音蓝v认证的好处和坏处分析

    抖音蓝v认证有什么作用? 什么是抖音蓝V认证? 抖音蓝V认证是抖音对于特定领域或人群进行身份验证后授予的官方认证标识,代表着用户在该领域具有一定的知名度和影响力。抖音蓝V认证的标志是一个蓝色“V”字,出现在用户个人资料页上方。 抖音蓝V认证有什么作用? 1. 提升用户信任度 在众多抖音用户中,拥有蓝V认证的用户会比普通用户更容易获得其他用户的信任。因为蓝V认…

    C 2023年5月22日
    00
  • 数据库设计规范化的五个要求 推荐收藏

    数据库设计规范化是一项非常重要的工作,它能够确保数据库的稳定性和可靠性。下面介绍数据库设计规范化的五个要求及相应的推荐收藏。 一、满足第一范式(1NF) 第一范式中要求每个表中的每一列都是原子性的,即不可再分解。如果一个表中存在重复的数据,就需要将其拆分为多个表,每个表中都只包含单一属性。例如,考虑一个音乐播放平台,一个包含歌曲名、歌手和作曲家的表格: So…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部