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. 类的基本概念 类是面向对象编程的核心,它封装了数据和操作数据的函数。 #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)方法:按照字典序比较 4.1.3 int compareTo(Strin…...
【docker】docker的起源与容器的由来、docker容器的隔离机制
Docker 的起源与容器的由来 1. 虚拟机的局限:容器的需求萌芽 在 Docker 出现之前,开发和部署软件主要依赖虚拟机(VMs): 虚拟机通过模拟硬件运行操作系统,每个应用程序可以运行在自己的独立环境中。虽然虚…...

Window 安装 Nginx
参考链接 Windows 环境nginx安装使用及目录结构详解_windows 安装nginx-CSDN博客 Nginx 安装及配置教程(Windows)【安装】_nginx下载安装-CSDN博客 安装 1)下载 nginx: download 2)解压 3)启动 3.1)方…...
replace (regexp|substr, newSubstr|function)替换字符串中的指定部分
replace 方法用于替换字符串中的指定部分。它可以接受一个子字符串或正则表达式作为第一个参数,第二个参数是替换的内容。 用法示例 基本替换 let str "Hello, world!"; let newStr str.replace("world", "everyone"); console.lo…...

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

cesium 3Dtiles变量
原本有一个变亮的属性luminanceAtZenith,但是新版本的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(请自行安装并设置环境变量) 2.将服务器上的WEARVER文件夹拷贝到开发环境下(其中要包含ecology和Resin目录) 3.通过idea创建一个基础Java项目,将jdk设置为1.8 4.添加依赖,需要将3个文件夹的所有jar包添加到项目中…...

【Stable Diffusion】安装教程
目录 一、python 安装教程 二、windows cuda安装教程 三、Stable Diffusion下载 四、Stable Diffusion部署(重点) 一、python 安装教程 (1)第一步下载 打开python下载页面,找到python3.10.9,点击右边…...

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

【力扣】541.反转字符串2
问题描述 思路解析 每当字符达到2*k的时候,判断,同时若剩余字符>k,只对前k个进行判断(这是重点)因为字符串是不可变变量,所以将其转化为字符串数组,最后才将结果重新转变为字符串 字符串->字符数组 …...
什么是防抖与节流
防抖(Debouncing)与节流(Throttling) 在前端开发中,尤其是在处理用户输入、窗口调整大小、滚动事件等高频率触发的事件时,防抖和节流是两种常用的技术手段。它们可以帮助我们优化性能,减少不必…...

springboot vue 开源 会员收银系统 (12)购物车关联服务人员 订单计算提成
前言 完整版演示 http://120.26.95.195/ 开发版演示 http://120.26.95.195:8889/ 在之前的开发进程中,我们完成订单的挂单和取单功能,今天我们完成购物车关联服务人员,用户计算门店服务人员的提成。 1.商品关联服务人员 服务人员可以选择 一…...

FFmpeg 推流给 FreeSWITCH
FFmpeg 推流,貌似不难,网上有很多资料, 接到一个任务,推流给 FreeSWITCH,最开始以为很容易, 实则不然,FreeSWITCH uuid_debug_media <uuid>, 一直没人任何反应 仔细一查,Fr…...
.npmrc文件的用途
.npmrc 文件是 npm(Node.js 的包管理工具)用于配置项目或用户的设置文件。它可以存储与 npm 相关的配置信息,如注册表地址、认证信息、代理设置、安装路径等。.npmrc 文件可以出现在不同的地方,具有不同的作用范围,通常…...

C++游戏开发入门:如何从零开始实现自己的游戏项目?
成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C游戏开发的相关内容! 关于【…...
Redis设计与实现第16章 -- Sentinel 总结1(初始化、主从服务器获取信息、发送信息、接收信息)
Sentinel是Redis的高可用解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主…...

Windows10+VirtualBox+Ubuntu:安装虚拟机VirtualBox,虚拟机中安装Ubuntu
一、需求 在Windows10系统中,安装虚拟机VirtualBox,VirtualBox中安装Ubuntu桌面版。 二、环境准备 系统环境 Windows10 内存:8G 虚拟化 虚拟机的运行,如果需要Windows系统开启虚拟化,可以通过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上微调和扩展大型语言模型(LLM)的指南。Torchtune 是一个PyTorch库,旨在让您轻松地…...

C底层 函数栈帧
文章目录 一,什么是寄存器 二,栈和帧 前言 我们在学习c语言程序的时候,是不是有很多的疑问,如 1,为什么形参不可以改变实参 2,为什么我们编写程序的时候会出现烫烫烫......这个乱码 3,那些局…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 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算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
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|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...