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

yizhihongxing

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日

相关文章

  • C/C++实现HTTP协议解析的示例代码

    C/C++实现HTTP协议解析的示例代码的完整攻略如下: 一、准备工作 在开始编写HTTP协议解析代码前,需要安装以下工具:- C/C++编译器:例如gcc、Visual Studio等。- cURL库:用于发送HTTP请求和接收HTTP响应。 二、HTTP协议解析 1. TCP连接 在使用HTTP协议进行通信时,首先需要建立TCP连接。可以使用C/C++的…

    C 2023年5月24日
    00
  • C语言指针的图文详解

    C语言指针的图文详解 什么是指针 在C语言中,指针是一种特殊的数据类型,它存储的是一个内存地址,该内存地址指向存储在内存中的另外一个变量的值。可以将指针看作一种工具,它可以用来操作内存中的数据,让程序更加灵活和高效。 如何声明指针 在C语言中声明指针需要使用星号(*)符号。例如,下面的代码定义了一个名为“ptr”的指向整数变量的指针: int *ptr; 上…

    C 2023年5月22日
    00
  • Linux多线程环境下 关于进程线程终止函数总结

    让我来为您分享一下“Linux多线程环境下 关于进程线程终止函数总结”的完整攻略。 标题 一、背景 对于在Linux系统下进行多线程编程的开发人员来说,进程线程的创建、终止函数是必须要掌握的知识点。本文主要总结了Linux中进程线程终止的相关函数,如何使用它们,并提供了两个示例说明,帮助读者更好的理解这些函数的使用方法。 二、进程线程终止函数总结 下面是Li…

    C 2023年5月22日
    00
  • C++实现折半查找

    实现折半查找的过程可以分为以下几步: 步骤一:准备有序数组 折半查找需要在一个有序数组中进行查找,因此首先需要准备一个有序数组,可以使用C++中的std::sort来进行排序。 #include <iostream> #include <algorithm> int main() { int arr[] = {2, 3, 4, 5, …

    C 2023年5月22日
    00
  • C#中[]的几种用法示例代码

    下面是《C#中[]的几种用法示例代码》的完整攻略,希望能对你有所帮助。 简介 中括号 [] 在 C# 中有多种用法,包括声明数组、索引器、指针等。在学习 C# 时,理解这些用法非常重要。 用法一:声明数组 在 C# 中,可以使用中括号 [] 来声明数组。以下是一个将整数存储在数组中的示例: int[] numbers = { 1, 2, 3, 4 }; 在上…

    C 2023年5月22日
    00
  • C语言用指针传递数据

    C语言中,通过指针传递数据是常见的编程方式,它可以使变量在多个函数中共享,同时也可以避免函数返回值造成的资源浪费等问题。 一、指针的基础语法 指针是存储其他变量地址的变量,可以通过 * 运算符获取该地址存储的值。指针的定义方式如下: int *p; // 定义一个指向 int 类型变量的指针 通过 & 运算符可以获取变量的地址,如: int a = …

    C 2023年5月9日
    00
  • C语言预处理器使用方法讲解

    C语言预处理器使用方法讲解 什么是预处理器? 在C语言中,预处理器是指一组能够在编译代码之前进行处理的指令和宏定义。通过使用预处理器指令,开发者可以在编译代码之前就进行一些代码处理,提高代码运行效率以及增强代码的可移植性。 预处理器指令的语法 在C语言中,预处理器指令以#符号开头,如下所示: #include <stdio.h> #define …

    C 2023年5月23日
    00
  • 18核i9-9980XE性能怎么样?英特尔酷睿i9-9980XE处理器详细评测+天梯图

    18核i9-9980XE性能评测 介绍 英特尔酷睿i9-9980XE处理器,拥有18核心和36线程,是英特尔最新一代高端桌面CPU,定位于高端游戏和专业工作。它配备了高主频、高缓存和超线程等先进技术,使其能够在多线程任务和单线程任务方面都能获得出色的性能表现。 本文将对18核i9-9980XE的性能做详细评测,给读者带来全方位的表现和性能数据。 性能测试 1…

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