08-C++学习笔记-类与对象

news2024/9/27 17:28:19

在这里插入图片描述

🔟🔒 08-C++学习笔记-类与对象

在本篇学习笔记中,我们将详细讲解C++中的类与对象的概念和相关知识。类是C++中一种重要的数据类型,它允许我们自定义数据结构和相应的操作。

📚 C++类与对象详细讲解

✨类的概念

类是一种用户自定义的数据类型,它封装了数据和操作这些数据的函数。类可以看作是一种模板或蓝图,用于创建具有相同属性和行为的对象。

✨类的组成

一个类由数据成员和成员函数组成。数据成员用于存储对象的状态,而成员函数用于操作对象的行为。

✨对象的概念

对象是类的实例,是根据类的定义创建的具体变量。通过创建对象,我们可以使用类中定义的数据成员和成员函数。

🏗️ 类的结构

✨ 类的声明

类的声明描述了类的名称和成员,但没有具体的实现。类的声明通常放在头文件中,以便其他源文件可以使用该类。

示例:

// 类的声明
class MyClass {
    // 数据成员
    int num;

    // 成员函数
    void printNum();
};

在上述示例中,我们声明了一个名为MyClass的类,它包含一个整型数据成员num和一个成员函数printNum

✨类的定义

类的定义提供了成员函数的具体实现。类的定义通常放在源文件中,以便将类的声明和定义分离。

示例:

// 类的声明
class MyClass {
    // 数据成员
    int num;

    // 成员函数
    void printNum();
};

// 类的定义
void MyClass::printNum() {
    cout << "Num: " << num << endl;
}

在上述示例中,我们在类的定义中实现了成员函数printNum

👀 类的定义与访问

✨ 类的定义

在C++中,我们可以通过class关键字来定义一个类。类的定义包括类名、数据成员和成员函数。

示例:

class MyClass {
    // 数据成员
    int num;

    // 成员函数
    void printNum();
};

在上述示例中,我们定义了一个名为MyClass的类,它包含一个整型数据成员num和一个成员函数printNum

✨ 类的访问

类的成员可以分为公有成员、私有成员和保护成员。默认情况下,类的成员是私有的,只能在类的内部访问。我们可以使用访问修

饰符来控制类的成员的访问权限。

  • public:公有成员,可以在类的外部和派生类中访问。
  • private:私有成员,只能在类的内部访问。
  • protected:保护成员,可以在类的内部和派生类中访问。

示例:

class MyClass {
public:
    int publicNum;      // 公有成员

private:
    int privateNum;     // 私有成员

protected:
    int protectedNum;   // 保护成员
};

在上述示例中,我们定义了一个类MyClass,其中包含了公有成员publicNum、私有成员privateNum和保护成员protectedNum

🚀 静态成员

✨静态数据成员

静态数据成员是属于整个类而不是类的具体对象的成员。它在类的所有对象中共享相同的值。

示例:

class MyClass {
public:
    static int count;   // 静态数据成员
};

int MyClass::count = 0;   // 静态数据成员的初始化

int main() {
    MyClass::count++;    // 使用类名访问静态数据成员
    cout << "Count: " << MyClass::count << endl;

    return 0;
}

在上述示例中,我们定义了一个静态数据成员count,并在main函数中使用类名访问并修改了该静态数据成员的值。

✨静态成员函数

静态成员函数属于整个类而不是类的具体对象,它可以在没有类的对象的情况下被调用。

示例:

class MyClass {
public:
    static void printMessage() {
        cout << "Hello, world!" << endl;
    }
};

int main() {
    MyClass::printMessage();   // 使用类名调用静态成员函数

    return 0;
}

在上述示例中,我们定义了一个静态成员函数printMessage,并在main函数中使用类名调用了该静态成员函数。

🏗️ 构造函数与析构函数

✨构造函数

构造函数是一种特殊的成员函数,它在创建对象时被调用,用于初始化对象的数据成员。构造函数的名称与类名相同,没有返回类型,可以有参数。

示例:

class MyClass {
public:
    // 默认构造函数
    MyClass() {
        cout << "Default constructor called." << endl;
    }

    // 带参数的构造函数
    MyClass(int n) {
        cout << "Constructor with parameter called. Value: " << n << endl;
    }
};

int main() {
    MyClass obj1;       // 调用默认构造函数
    MyClass obj2(10);   // 调用带参数的构造函数

    return 0

;
}

在上述示例中,我们定义了一个类MyClass,并在其中定义了默认构造函数和带参数的构造函数。在main函数中创建了两个对象,分别调用了不同的构造函数。

✨析构函数

析构函数是一种特殊的成员函数,它在对象被销毁时自动调用,用于清理对象分配的资源。析构函数的名称与类名相同,前面加上波浪号(~),没有返回类型,不接受任何参数。

示例:

class MyClass {
public:
    // 析构函数
    ~MyClass() {
        cout << "Destructor called." << endl;
    }
};

int main() {
    MyClass obj;    // 创建对象

    return 0;       // 对象被销毁,调用析构函数
}

在上述示例中,我们定义了一个类MyClass,其中包含了一个析构函数。在main函数中创建了一个对象,在程序结束时,该对象被销毁,调用了析构函数。

🔄 复制构造函数

复制构造函数是一种特殊的构造函数,用于创建一个新对象,并将其初始化为与另一个同类对象相同的值。

示例:

class MyClass {
public:
    int value;

    // 复制构造函数
    MyClass(const MyClass& other) {
        value = other.value;
    }
};

int main() {
    MyClass obj1;
    obj1.value = 10;

    MyClass obj2(obj1);   // 使用复制构造函数创建新对象并初始化

    cout << "Value of obj2: " << obj2.value << endl;

    return 0;
}

在上述示例中,我们定义了一个类MyClass,其中包含了一个复制构造函数。在main函数中创建了一个对象obj1,并将其值设置为10。然后,使用复制构造函数创建了一个新对象obj2,并将其值初始化为obj1的值。

这样,我们就完成了对C++类与对象的详细讲解。掌握了类的概念、类的结构、类的定义与访问、静态成员、构造函数与析构函数以及复制构造函数等重要知识点。通过合理地使用类与对象,我们可以更好地组织和管理代码,实现模块化编程的思想。

🔎 总结

在本篇学习笔记中,我们深入学习了C++中的类与对象。我们了解了类的概念、类的结构、类的定义与访问、静态成员、构造函数与析构函数以及复制构造函数等重要内容。通过合理地使用类与对象,我们可以提高代码的可读性、可维护性和复用性。掌握这些知识,将有助于我们更加灵活和高效地

使用C++进行编程。

希望本篇学习笔记对你的学习有所帮助!如果有任何疑问,欢迎继续探索更多关于C++类与对象的知识。祝你在编程的道路上取得更大的进步!🚀

⭐️希望本篇文章对你有所帮助。

⭐️如果你有任何问题或疑惑,请随时向提问。

⭐️感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑客(网络安全)自学

前言&#xff1a; 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答 .4.遇到实在搞不懂的,可以先放放,以后…

3dmax导出cad

3dmax2022 导出cad 导入arcmap 10.2 导出版本为AutoCAD 2007 DWG

玩转Matplotlib的10个高级技巧

Matplotlib是Python中流行的数据可视化库&#xff0c;仅使用简单的几行代码就可以生成图表。但是默认的方法是生成的图表很简单&#xff0c;如果想增强数据演示的影响和清晰度&#xff0c;可以试试本文总结的10个高级技巧&#xff0c;这些技巧可以将可视化提升到一个新的水平: …

Hyperledger Fabric网络快速启动

目录 1、网络服务配置 2、关联的docker-compose-base.yaml 各Peer节点容器设置如下信息。 3、被关联的Peer-base.yaml 4、启动网络 2、完成通道的创建 2.1将节点加入应用通道 更新锚节点 2.为什么要创建节点并将其加入应用通道中&#xff1f; 1、网络服务配置 由于要启动…

人工智能(pytorch)搭建模型16-基于LSTM+CNN模型的高血压预测的应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型16-基于LSTMCNN模型的高血压预测的应用&#xff0c;LSTMCNN模型搭建与训练&#xff0c;本项目将利用pytorch搭建LSTMCNN模型&#xff0c;涉及项目&#xff1a;高血压预测&#xff0c;高血…

鼠标点击切换图片(使用js中的src属性)

使用到的知识点&#xff1a; 模板字符串 js中的src属性 img.src ./images/${i}.jpg 效果展示&#xff1a; 具体代码实现&#xff1a; <body><div class"box" style"width:500px;height:300px;margin:100px auto;"><img src&quo…

Python中获取指定目录下所有文件名的方法

在《Python中文件名和路径的操作》中提到&#xff0c;os模块中的函数可以对文件进行操作。通过递归以及os模块中提供的函数&#xff0c;可以获取指定目录下所有的文件名。 1 基本流程 通过递归获取指定目录下所有文件名的基本流程&#xff0c;如图1所示。 图1 基本流程 2 函…

Web开播系统的技术演进

随着直播SaaS业务的深入发展&#xff0c;Web端开播的诉求变得越来越强烈&#xff0c;对比客户端开播工具如OBS&#xff0c;Web开播与SaaS平台亲和度高&#xff0c;可以让用户快速体验平台全流程&#xff0c;同时易于分享链接&#xff0c;快速连麦。因此&#xff0c;寻求更加稳定…

#10046. 「一本通 2.2 练习 2」OKR-Periods of Words(内附封面)

[POI2006] OKR-Periods of Words 题面翻译 对于一个仅含小写字母的字符串 a a a&#xff0c; p p p 为 a a a 的前缀且 p ≠ a p\ne a pa&#xff0c;那么我们称 p p p 为 a a a 的 proper 前缀。 规定字符串 Q Q Q&#xff08;可以是空串&#xff09;表示 a a a 的…

CMake 变量

目录 cmake普通变量 如何取消变量 cmake环境变量 cmake缓存变量 普通变量使用: 缓存变量使用: cmake变量的作用域 block() block demo: function 函数作用域简单 demo 高级变量 总结: 和其他语言一样,cmake完全可以看做是一种编程语言,他有变量,有函数等. cmake普通…

解决uview-plus组件样式修改不生效

一、问题描述 使用 ::v-deep 、/deep/ 等各种 deep 写法后&#xff0c;修改 uview-plus组件样式依旧不生效 二、解决方案 在子组件中写页面布局&#xff0c;在父组件中写CSS样式 目录结构&#xff1a; 父组件中&#xff1a;引入子组件&#xff0c;使用::v-deep修改样式 子组件…

git配置密钥及提交代码到仓库

原文合集地址如下&#xff0c;有需要的朋友可以关注 本文地址 合集地址 一、git下载及安装 Git官网&#xff1a;www.git-scm.com/ 下载安装包进行安装。 点击downloads下载自己需要的安装包。本文基于windows系统。 下载安装包后双击exe文件&#xff0c;如何一系列next操作…

提升文件管理效率:轻松批量归类文件,按名称细分管理

现代生活中&#xff0c;我们每天都面对着大量的电子文件&#xff0c;如文档、照片、音乐和视频等。这么多文件堆积在一起&#xff0c;怎样快速找到需要的文件成了一个挑战。现在有应该方法可以帮助您提升文件管理效率&#xff0c;方法如下&#xff1a; 首先&#xff0c;第一步…

AutoSAR系列讲解(入门篇)4.6-BSW的Watchdog功能

一、架构与术语解释 前面都挺难的吧&#xff1f;实践出真知&#xff0c;后面实践篇的时候&#xff0c;大家应该就能明白了。这一节就来讲个简单的功能------看门狗。看门狗想必大家应该都再熟悉不过了吧&#xff0c;主要就下面三层结构&#xff0c;简单明了&#xff0c;这节确实…

从入门到精通:解锁Linux开发工具和编译器的力量

目录 一.编辑器vim的使用1.vim的基本概念2.vim的使用二.编译器gcc/g1.编译器的使用2.编译器是如何完成的&#xff1f;3.动态库与静态库 一.编辑器vim的使用 1.vim的基本概念 vim是一个方便编程的功能特别丰富的文本编辑器&#xff0c;凭借他简洁的三种模式以及丰富的快捷键操…

Arduino IDE的安装

https://www.arduino.cc/en/software/

AI 绘画 - 建筑绘图辅助设计之 Controlnet

前情提要 2023-06-17 周六 杭州 阴 小记: 早上还是可以听到淅淅沥沥的雨声&#xff0c;或许梅雨季快要来了&#xff0c;潮湿的感觉说不上多讨厌&#xff0c;可是也没有那么喜欢&#xff1b;最近在追动画《飞出个未来》&#xff0c;我是把这个动画当作哲学课来看的&#xff0c…

linux模块的变量与函数导出与引用

在Linux内核中&#xff0c;不同模块之间可以通过导出和引用函数或变量的方式来进行交互。具体而言&#xff0c;Linux内核提供了一些导出和引用符号的机制&#xff0c;这些机制可以使得不同模块之间能够访问并使用彼此的函数或变量。 导出符号的方式一般有两种&#xff1a; 使…

【动态规划算法练习】day12

文章目录 一、978. 最长湍流子数组1.题目简介2.解题思路3.代码4.运行结果 二、413. 等差数列划分1.题目简介2.解题思路3.代码4.运行结果 三、1567. 乘积为正数的最长子数组长度1.题目简介2.解题思路3.代码4.运行结果 总结 一、978. 最长湍流子数组 1.题目简介 978. 最长湍流子…