当前位置: 首页 > news >正文

C++的类功能整合

1. 类的基本概念

类是面向对象编程的核心,它封装了数据和操作数据的函数。

#include <iostream>
using namespace std;class MyClass {
public:int publicData;void publicFunction() {cout << "Public function" << endl;}private:int privateData;void privateFunction() {cout << "Private function" << endl;}
};int main() {MyClass obj;obj.publicData = 10;obj.publicFunction();// obj.privateData = 20; // 错误:private成员无法直接访问// obj.privateFunction(); // 错误:private成员无法直接访问return 0;
}

2. 成员变量和成员函数

成员变量是类中的数据,成员函数是类中的函数。

#include <iostream>
using namespace std;class MyClass {
public:int data; // 成员变量void display() { // 成员函数cout << "Data: " << data << endl;}
};int main() {MyClass obj;obj.data = 42;obj.display(); // 输出: Data: 42return 0;
}

3. 访问修饰符

  • public:任何地方都可以访问。
  • private:只能类内部访问。
  • protected:类内部和派生类可以访问。
    #include <iostream>
    using namespace std;class MyClass {
    public:int publicData;private:int privateData;protected:int protectedData;public:void display() {cout << "Public: " << publicData << endl;cout << "Private: " << privateData << endl;cout << "Protected: " << protectedData << endl;}
    };int main() {MyClass obj;obj.publicData = 10;// obj.privateData = 20; // 错误:private成员无法直接访问// obj.protectedData = 30; // 错误:protected成员无法直接访问obj.display();return 0;
    }

4. 构造函数和析构函数

构造函数在对象创建时调用,析构函数在对象销毁时调用。

#include <iostream>
using namespace std;class MyClass {
public:MyClass() {cout << "Constructor" << endl;}~MyClass() {cout << "Destructor" << endl;}
};int main() {MyClass obj; // 创建对象时调用构造函数// 程序结束时调用析构函数return 0;
}

5. 运算符重载

允许自定义运算符的行为。

#include <iostream>
using namespace std;class Complex {
public:double real, imag;Complex(double r, double i) : real(r), imag(i) {}Complex operator + (const Complex& other) {return Complex(real + other.real, imag + other.imag);}
};int main() {Complex c1(1.0, 2.0);Complex c2(3.0, 4.0);Complex c3 = c1 + c2;cout << "c3: " << c3.real << " + " << c3.imag << "i" << endl; // 输出: c3: 4 + 6ireturn 0;
}

6. 拷贝构造函数和赋值运算符

用于对象的拷贝和赋值。

#include <iostream>
using namespace std;class MyClass {
public:int data;MyClass(int d) : data(d) {}MyClass(const MyClass& other) : data(other.data) {cout << "Copy constructor" << endl;}MyClass& operator = (const MyClass& other) {if (this != &other) {data = other.data;}return *this;}
};int main() {MyClass obj1(42);MyClass obj2 = obj1; // 调用拷贝构造函数MyClass obj3(0);obj3 = obj1; // 调用赋值运算符cout << "obj2.data: " << obj2.data << endl; // 输出: obj2.data: 42cout << "obj3.data: " << obj3.data << endl; // 输出: obj3.data: 42return 0;
}

7. 模板类

允许类在编译时根据类型参数生成不同的类。

#include <iostream>
using namespace std;template <typename T>
class MyTemplateClass {
public:T data;MyTemplateClass(T d) : data(d) {}void display() {cout << "Data: " << data << endl;}
};int main() {MyTemplateClass<int> intObj(42);intObj.display(); // 输出: Data: 42MyTemplateClass<double> doubleObj(3.14);doubleObj.display(); // 输出: Data: 3.14return 0;
}

8. 异常处理

用于处理运行时错误。

#include <iostream>
#include <exception>
using namespace std;class MyException : public exception {
public:const char* what() const throw() {return "My custom exception";}
};void throwException() {throw MyException();
}int main() {try {throwException();} catch (const MyException& e) {cout << "Caught exception: " << e.what() << endl; // 输出: Caught exception: My custom exception}return 0;
}


 

9. 智能指针

自动管理内存,避免内存泄漏。

#include <iostream>
#include <memory>
using namespace std;class MyClass {
public:void display() {cout << "Display" << endl;}
};int main() {unique_ptr<MyClass> ptr(new MyClass());ptr->display(); // 输出: Displayreturn 0;
}


 

10. 继承和多态

继承允许子类继承父类的特性,多态允许同一接口有多种实现。

#include <iostream>
using namespace std;class Base {
public:virtual void display() const {cout << "Base class display" << endl;}virtual ~Base() {}
};class Derived : public Base {
public:void display() const override {cout << "Derived class display" << endl;}
};int main() {Base* b = new Derived();b->display(); // 输出: Derived class displaydelete b;return 0;
}

11. 纯虚函数和抽象类

纯虚函数使得类成为抽象类,不能直接实例化。

#include <iostream>
using namespace std;class AbstractBase {
public:virtual void pureVirtualFunction() const = 0;virtual ~AbstractBase() {}
};class ConcreteDerived : public AbstractBase {
public:void pureVirtualFunction() const override {cout << "Concrete implementation" << endl;}
};int main() {AbstractBase* a = new ConcreteDerived();a->pureVirtualFunction(); // 输出: Concrete implementationdelete a;return 0;
}

12. 友元函数和友元类

友元可以访问类的私有成员。

#include <iostream>
using namespace std;class MyClass {
private:int privateData;public:MyClass(int data) : privateData(data) {}friend void friendFunction(const MyClass& obj);friend class FriendClass;
};void friendFunction(const MyClass& obj) {cout << "Private data: " << obj.privateData << endl;
}class FriendClass {
public:void display(const MyClass& obj) {cout << "Private data: " << obj.privateData << endl;}
};int main() {MyClass obj(42);friendFunction(obj); // 输出: Private data: 42FriendClass fc;fc.display(obj); // 输出: Private data: 42return 0;
}

13. 嵌套类

嵌套类是定义在另一个类内部的类。

#include <iostream>
using namespace std;class OuterClass {
public:class InnerClass {public:void display() const {cout << "Inner class display" << endl;}};void outerFunction() {InnerClass inner;inner.display();}
};int main() {OuterClass::InnerClass inner;inner.display(); // 输出: Inner class displayOuterClass outer;outer.outerFunction(); // 输出: Inner class displayreturn 0;
}

14. 静态成员

静态成员属于类,而不是某个具体的对象。

#include <iostream>
using namespace std;class MyClass {
public:static int staticData;static void staticFunction() {cout << "Static data: " << staticData << endl;}
};int MyClass::staticData = 10;int main() {MyClass::staticFunction(); // 输出: Static data: 10MyClass::staticData = 20;MyClass::staticFunction(); // 输出: Static data: 20return 0;
}

15. 类型转换运算符

类型转换运算符允许将类的对象转换为其他类型。

#include <iostream>
using namespace std;class MyInteger {
private:int value;public:MyInteger(int val) : value(val) {}operator int() const {return value;}
};int main() {MyInteger mi(42);int num = mi; // 使用类型转换运算符cout << "num: " << num << endl; // 输出: num: 42return 0;
}

16. 命名空间

命名空间用于避免名称冲突。

#include <iostream>
using namespace std;namespace MyNamespace {void display() {cout << "Namespace display" << endl;}
}int main() {MyNamespace::display(); // 输出: Namespace displayreturn 0;
}

总结

通过这次整合,我们全面探讨了C++类的各个方面,从基本概念到高级特性,如继承、多态、纯虚函数、友元、嵌套类、静态成员、类型转换和命名空间等。这些特性使得C++在面向对象编程中非常强大和灵活。

相关文章:

C++的类功能整合

1. 类的基本概念 类是面向对象编程的核心&#xff0c;它封装了数据和操作数据的函数。 #include <iostream> using namespace std;class MyClass { public:int publicData;void publicFunction() {cout << "Public function" << endl;}private:i…...

《String类》

目录 一、定义与概述 二、创建字符串对象 2.1 直接赋值 2.2 使用构造函数 三、字符串的不可变性 四、常用方法 4.1 String对象的比较 4.1.1 比较是否引用同一个对象 4.1.2 boolean equals(Object anObject)方法&#xff1a;按照字典序比较 4.1.3 int compareTo(Strin…...

【docker】docker的起源与容器的由来、docker容器的隔离机制

Docker 的起源与容器的由来 1. 虚拟机的局限&#xff1a;容器的需求萌芽 在 Docker 出现之前&#xff0c;开发和部署软件主要依赖虚拟机&#xff08;VMs&#xff09;&#xff1a; 虚拟机通过模拟硬件运行操作系统&#xff0c;每个应用程序可以运行在自己的独立环境中。虽然虚…...

Window 安装 Nginx

参考链接 Windows 环境nginx安装使用及目录结构详解_windows 安装nginx-CSDN博客 Nginx 安装及配置教程&#xff08;Windows&#xff09;【安装】_nginx下载安装-CSDN博客 安装 1&#xff09;下载 nginx: download 2&#xff09;解压 3&#xff09;启动 3.1&#xff09;方…...

replace (regexp|substr, newSubstr|function)替换字符串中的指定部分

replace 方法用于替换字符串中的指定部分。它可以接受一个子字符串或正则表达式作为第一个参数&#xff0c;第二个参数是替换的内容。 用法示例 基本替换 let str "Hello, world!"; let newStr str.replace("world", "everyone"); console.lo…...

【ROS2】Ubuntu22.04安装ROS humble

一. ROS简介 1.1 什么是ROS ROS 是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务&#xff0c;包括硬件抽象&#xff0c;底层设备控制&#xff0c;常用函数的实现&#xff0c;进程间消息传递&#xff0c;以及包管理。ROS的核心思想就是将机器人的软件功能做…...

cesium 3Dtiles变量

原本有一个变亮的属性luminanceAtZenith&#xff0c;但是新版本的cesium没有这个属性了。于是 let lightColor 3.0result._customShader new this.ffCesium.Cesium.CustomShader({fragmentShaderText:void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial mate…...

配置泛微e9后端开发环境

配置泛微e9的后端开发环境 1.安装jdk1.8&#xff08;请自行安装并设置环境变量&#xff09; 2.将服务器上的WEARVER文件夹拷贝到开发环境下(其中要包含ecology和Resin目录) 3.通过idea创建一个基础Java项目,将jdk设置为1.8 4.添加依赖,需要将3个文件夹的所有jar包添加到项目中…...

【Stable Diffusion】安装教程

目录 一、python 安装教程 二、windows cuda安装教程 三、Stable Diffusion下载 四、Stable Diffusion部署&#xff08;重点&#xff09; 一、python 安装教程 &#xff08;1&#xff09;第一步下载 打开python下载页面&#xff0c;找到python3.10.9&#xff0c;点击右边…...

USB Type-C一线通扩展屏:多场景应用,重塑高效办公与极致娱乐体验

在追求高效与便捷的时代&#xff0c;启明智显USB Type-C一线通扩展屏方案正以其独特的优势&#xff0c;成为众多职场人士、娱乐爱好者和游戏玩家的首选。这款扩展屏不仅具备卓越的性能和广泛的兼容性&#xff0c;更能在多个应用场景中发挥出其独特的价值。 USB2.0显卡&#xff…...

【力扣】541.反转字符串2

问题描述 思路解析 每当字符达到2*k的时候&#xff0c;判断&#xff0c;同时若剩余字符>k,只对前k个进行判断&#xff08;这是重点&#xff09;因为字符串是不可变变量&#xff0c;所以将其转化为字符串数组&#xff0c;最后才将结果重新转变为字符串 字符串->字符数组 …...

什么是防抖与节流

防抖&#xff08;Debouncing&#xff09;与节流&#xff08;Throttling&#xff09; 在前端开发中&#xff0c;尤其是在处理用户输入、窗口调整大小、滚动事件等高频率触发的事件时&#xff0c;防抖和节流是两种常用的技术手段。它们可以帮助我们优化性能&#xff0c;减少不必…...

springboot vue 开源 会员收银系统 (12)购物车关联服务人员 订单计算提成

前言 完整版演示 http://120.26.95.195/ 开发版演示 http://120.26.95.195:8889/ 在之前的开发进程中&#xff0c;我们完成订单的挂单和取单功能&#xff0c;今天我们完成购物车关联服务人员&#xff0c;用户计算门店服务人员的提成。 1.商品关联服务人员 服务人员可以选择 一…...

FFmpeg 推流给 FreeSWITCH

FFmpeg 推流&#xff0c;貌似不难&#xff0c;网上有很多资料, 接到一个任务&#xff0c;推流给 FreeSWITCH&#xff0c;最开始以为很容易&#xff0c; 实则不然&#xff0c;FreeSWITCH uuid_debug_media <uuid>&#xff0c; 一直没人任何反应 仔细一查&#xff0c;Fr…...

.npmrc文件的用途

.npmrc 文件是 npm&#xff08;Node.js 的包管理工具&#xff09;用于配置项目或用户的设置文件。它可以存储与 npm 相关的配置信息&#xff0c;如注册表地址、认证信息、代理设置、安装路径等。.npmrc 文件可以出现在不同的地方&#xff0c;具有不同的作用范围&#xff0c;通常…...

C++游戏开发入门:如何从零开始实现自己的游戏项目?

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C游戏开发的相关内容&#xff01; 关于【…...

Redis设计与实现第16章 -- Sentinel 总结1(初始化、主从服务器获取信息、发送信息、接收信息)

Sentinel是Redis的高可用解决方案&#xff1a;由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器&#xff0c;以及这些主服务器属下的所有从服务器&#xff0c;被监视的主服务器进入下线状态时&#xff0c;自动将下线主服务器属下的某个从服务器升级为新的主…...

Windows10+VirtualBox+Ubuntu:安装虚拟机VirtualBox,虚拟机中安装Ubuntu

一、需求 在Windows10系统中&#xff0c;安装虚拟机VirtualBox&#xff0c;VirtualBox中安装Ubuntu桌面版。 二、环境准备 系统环境 Windows10 内存&#xff1a;8G 虚拟化 虚拟机的运行&#xff0c;如果需要Windows系统开启虚拟化&#xff0c;可以通过BIOS设置。 “虚拟…...

Torchtune在AMD GPU上的使用指南:利用多GPU能力进行LLM微调与扩展

Torchtune on AMD GPUs How-To Guide: Fine-tuning and Scaling LLMs with Multi-GPU Power — ROCm Blogs 这篇博客提供了一份详细的使用Torchtune在AMD GPU上微调和扩展大型语言模型&#xff08;LLM&#xff09;的指南。Torchtune 是一个PyTorch库&#xff0c;旨在让您轻松地…...

C底层 函数栈帧

文章目录 一&#xff0c;什么是寄存器 二&#xff0c;栈和帧 前言 我们在学习c语言程序的时候&#xff0c;是不是有很多的疑问&#xff0c;如 1&#xff0c;为什么形参不可以改变实参 2&#xff0c;为什么我们编写程序的时候会出现烫烫烫......这个乱码 3&#xff0c;那些局…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...