当前位置: 首页 > 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;那些局…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...