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

指针权限,new与delete,类与对象,函数模板,类模板的用法

指针权限 用法

void Print(const char* SecretPointer)
{cout << "绝密指令为:";cout << SecretPointer << endl;
}void Change(int& number, int* const FixedPointer)
{cout << "更换站台数字为:";cin >> number;cout << *FixedPointer << endl;
}int main()
{char* SecretPointer_01 = (char*)malloc(sizeof(char) * 20);cout << "请输入绝密指令:";cin >> SecretPointer_01;const char* SecretPointer = SecretPointer_01;Print(SecretPointer);int number = 100;int* const FixedPointer = &number;cout << "原站台数字为:" << *FixedPointer << endl;Change(number, FixedPointer);return 0;
}

new与delete 用法

#include <iostream>
using namespace std;int* CreateSpace1(int*&  PointerOfSum1)
{PointerOfSum1 = new int(0);     // 1 return new int[5]{ 1,2,3,4,5 };     //  2
}void AddArray1(int*& PointerOfSum1, int*& PointerOfArray1)
{for (int i = 0; i < 5; i++){(*PointerOfSum1) += (*(PointerOfArray1 + i));}
}// class StupidPerson
{
public:StupidPerson(int IQ = 10):_IQ(IQ){}int GetIQ(){return _IQ;}
private:int _IQ;
};StupidPerson* CreateSpace2(int*& PointerOfSum2)
{PointerOfSum2 = new int(0);return new StupidPerson[5];    // 3
}void AddArray2(int*& PointerOfSum2, StupidPerson*& PointerOfArray2)
{for (int i = 0; i < 5; i++){(*PointerOfSum2) += ((*(PointerOfArray2 + i)).GetIQ());}
}//class SmartPerson
{
public:SmartPerson(int IQ = 100):_IQ(IQ){}~SmartPerson(){_IQ = 0;}int GetIQ(){return _IQ;}
private:int _IQ;
};SmartPerson* CreateSpace3(int*& PointerOfSum3)
{PointerOfSum3 = new int(0);return new SmartPerson[5]{ SmartPerson(),SmartPerson(101),SmartPerson(102) ,SmartPerson(99) ,SmartPerson(107) };   // 4
}void AddArray3(int*& PointerOfSum3, SmartPerson*& PointerOfArray3)
{for (int i = 0; i < 5; i++){(*PointerOfSum3) += ((*(PointerOfArray3 + i)).GetIQ());}
}int main()
{int* PointerOfSum1 = nullptr;int* PointerOfArray1 = CreateSpace1(PointerOfSum1);AddArray1(PointerOfSum1, PointerOfArray1);cout << "总和为:" << (*PointerOfSum1) << endl;delete PointerOfSum1;   // 5delete[] PointerOfArray1;    //  6//int* PointerOfSum2 = nullptr;StupidPerson* PointerOfArray2 = CreateSpace2(PointerOfSum2);AddArray2(PointerOfSum2, PointerOfArray2);cout << "IQ总和为:" << (*PointerOfSum2) << endl;delete PointerOfSum2;delete[] PointerOfArray2;//int* PointerOfSum3 = nullptr;SmartPerson* PointerOfArray3 = CreateSpace3(PointerOfSum3);AddArray3(PointerOfSum3, PointerOfArray3);cout << "IQ总和为:" << (*PointerOfSum3) << endl;delete PointerOfSum3;delete[] PointerOfArray3;//SmartPerson* ps = (SmartPerson*)malloc(sizeof(SmartPerson) * 10);cout << "内存池已经创建完成!" << endl;new(ps)SmartPerson(110);    //  7new(ps + 1)SmartPerson(103);cout << "第一个人智商为:" << ps->GetIQ() << endl;cout << "第二个人智商为:" << (ps + 1)->GetIQ() << endl;ps->~SmartPerson();   // 8(ps + 1)->~SmartPerson();return 0;
}

类与对象 用法

test.h#include <iostream>
using namespace std;class Country
{friend class Citizen;friend istream& operator>>(istream& cin, Country& country);friend ostream& operator<<(ostream& cout, const Country& country);
public://构造函数Country();//拷贝构造函数Country(const Country& other);//析构函数~Country();//赋值运算符重载Country& operator=(const Country& other);
private:char* _countryname;char* _capital;
};
//流插入运算符重载
istream& operator>>(istream& cin, Country& country);
//流提取运算符重载
ostream& operator<<(ostream& cout, const Country& country);//class Citizen
{friend int operator>(const Citizen& c1, const Citizen& c2);friend istream& operator>>(istream& cin, Citizen& citizen);friend ostream& operator<<(ostream& cout, const Citizen& citizen);
public://构造函数explicit Citizen(bool iscriminal = false);//拷贝构造函数Citizen(const Citizen& other);//析构函数~Citizen();//赋值运算符重载Citizen& operator=(const Citizen& other);//前置++运算符重载Citizen& operator++();//后置++运算符重载Citizen operator++(int);//普通运算符重载Citizen& operator-(int num);//静态成员函数static int GetTotalCitizen();//友元类的跨类访问void GetCountry();
private://成员变量char* _personalname;int _age;Country _nationality;bool _iscriminal;int _creditscore;const int _maxcreditscore;//类的静态区成员变量static int _totalcitizen;
};
//普通运算符重载
int operator>(const Citizen& c1, const Citizen& c2);
//流插入运算符重载
istream& operator>>(istream& cin, Citizen& citizen);
//流提取运算符重载
ostream& operator<<(ostream& cout, const Citizen& citizen);
//func.cpp#include "test.h"//Country类相关
Country::Country()
{_countryname = new char[20]{ '\0' };_capital = new char[20]{ '\0' };
}Country::Country(const Country& other)
{_countryname = new char[20]{ '\0' };_capital = new char[20]{ '\0' };memcpy(_countryname, other._countryname, sizeof(char) * 20);memcpy(_capital, other._capital, sizeof(char) * 20);
}Country::~Country()
{delete[] _countryname;delete[] _capital;
}Country& Country::operator=(const Country& other)
{if (&other != this){memcpy(_countryname, other._countryname, sizeof(char) * 20);memcpy(_capital, other._capital, sizeof(char) * 20);}return *this;
}istream& operator>>(istream& cin, Country& country)
{cin >> country._countryname >> country._capital;return cin;
}ostream& operator<<(ostream& cout, const Country& country)
{cout << country._countryname << " " << country._capital;return cout;
}//Citizen类相关
Citizen::Citizen(bool iscriminal):_age(0),_nationality(),_iscriminal(iscriminal),_creditscore(0),_maxcreditscore(100)
{_personalname = new char[20]{ '\0' };_totalcitizen++;
}Citizen::Citizen(const Citizen& other):_age(other._age), _nationality(other._nationality), _iscriminal(other._iscriminal), _creditscore(other._creditscore), _maxcreditscore(other._maxcreditscore)
{_personalname = new char[20]{ '\0' };memcpy(_personalname, other._personalname, sizeof(char) * 20);_totalcitizen++;
}Citizen::~Citizen()
{delete[] _personalname;_totalcitizen--;
}Citizen& Citizen::operator=(const Citizen& other)
{if (&other != this){_age = other._age;_nationality = other._nationality;_iscriminal = other._iscriminal;_creditscore = other._creditscore;memcpy(_personalname, other._personalname, sizeof(char) * 20);}return *this;
}Citizen& Citizen::operator++()
{if (_creditscore < _maxcreditscore){_creditscore++;}return *this;
}Citizen Citizen::operator++(int)
{Citizen tmp(*this);if (_creditscore < _maxcreditscore){_creditscore++;}return tmp;
}Citizen& Citizen::operator-(int num)
{if (_creditscore > 0){_creditscore -= num;if (_creditscore < 0){_creditscore = 0;}}return *this;
}int operator>(const Citizen& c1, const Citizen& c2)
{if (c1._creditscore > c2._creditscore){return 1;}else if (c1._creditscore < c2._creditscore){return 2;}else{return 0;}
}istream& operator>>(istream& cin, Citizen& citizen)
{cin >> citizen._personalname >> citizen._age >> citizen._nationality>> citizen._iscriminal >> citizen._creditscore;return cin;
}ostream& operator<<(ostream& cout, const Citizen& citizen)
{cout << citizen._personalname << " " << citizen._age << " " << citizen._nationality<< " " << citizen._iscriminal << " " << citizen._creditscore;return cout;
}int Citizen::GetTotalCitizen()
{return _totalcitizen;
}void Citizen::GetCountry()
{cout << _nationality._countryname << " " << _nationality._capital << endl;
}//类的静态区成员变量定义
int Citizen::_totalcitizen = 0;
//test.cpp#include "test.h"int main()
{Citizen Shen(0);cin >> Shen;cout << Shen << endl;Citizen Jun(Shen);cout << Jun << endl;Citizen Elon(0);cin >> Elon;cout << Elon << endl;cout << "此时人数:" << Citizen::GetTotalCitizen() << endl;return 0;
}

函数模板 用法

// test.h#include <iostream>
using namespace std;template <typename T>
void Swap(T& a, T& b)
{T tmp = a;a = b;b = tmp;
}template <typename T1, typename T2, typename T3>
void Print(const T1& a, const T2& b, const T3& c)
{cout << a << " " << b << " " << c << endl;
}
// test.cpp
#include "test.h"int main()
{int x = 1;int y = 2;char m = 'x';char n = 'y';cout << "交换前:" << endl;cout << x << " " << y << endl;cout << m << " " << n << endl;Swap(x, y);Swap(m, n);cout << "交换后:" << endl;cout << x << " " << y << endl;cout << m << " " << n << endl;//const char* pointer = "根据ASCII码表对应的(值/字符)为";char obj1 = 'A';int obj2 = 65;Print(obj1, pointer, obj2);Print<int, const char*, char>(obj1, pointer, obj2);     return 0;
}

类模板 用法

// test.h
#include <iostream>
using namespace std;template <typename T>
class Person
{friend istream& operator>>(istream& cin, Person<T>& person){cin >> person._name >> *(person._luckysymbol);return cin;}friend ostream& operator<<(ostream& cout, Person<T>& person){cout << person._name << " " << *(person._luckysymbol);return cout;}
public:Person();Person(const Person& other);~Person();Person& operator=(const Person& other);
private:char* _name;T* _luckysymbol;
};template <typename T>
Person<T>::Person()
{_name = new char[20]{ 0 };_luckysymbol = new T(0);
}template <typename T>
Person<T>::Person(const Person& other):_name(new char[20]{ 0 }), _luckysymbol(new T(0))
{memcpy(_name, other._name, sizeof(char) * 20);*_luckysymbol = *(other._luckysymbol);
}template <typename T>
Person<T>::~Person()
{delete _luckysymbol;delete[] _name;
}template <typename T>
Person<T>& Person<T>::operator=(const Person& other)
{if (&other != this){memcpy(_name, other._name, sizeof(char) * 20);*_luckysymbol = *(other._luckysymbol);}return  *this;
}
// test.cpp
#include "test.h"int main()
{Person<int> Shen;Person<char> Hu;Person<double> Ye;cin >> Shen >> Hu >> Ye;Person<int> Junyang(Shen);  Person<char> Yao;   Yao = Hu;   cout << Shen << endl;cout << Hu << endl;cout << Ye << endl;cout << Junyang << endl;cout << Yao << endl;return 0;
}

相关文章:

指针权限,new与delete,类与对象,函数模板,类模板的用法

指针权限 用法 void Print(const char* SecretPointer) {cout << "绝密指令为&#xff1a;";cout << SecretPointer << endl; }void Change(int& number, int* const FixedPointer) {cout << "更换站台数字为&#xff1a;";c…...

Unity——脚本与序列化

在介绍序列化之前&#xff0c;我们先来了解一下为什么要对数据进行序列化 数据序列化有以下几个主要的应用场景和目的&#xff1a; 1. 持久化存储&#xff1a;序列化可以将对象或数据结构转换为字节序列&#xff0c;使得其可以被存储在磁盘上或数据库中。通过序列化&#xff…...

NJ求职盘点

电子显示 集成电路 地平线 后摩智能 芯启源 自动驾驶 地平线 栖霞区兴智科技园 泊车、SLAM/3D算法工程师 https://wecruit.hotjob.cn/SU64819a4f2f9d2433ba8b043a/pb/social.html?currentPage1 后摩智能 栖霞区兴智科技园 视觉感知算法资深工程师 可以做自动驾驶前瞻性…...

01卡特兰数

卡特兰数跟排列组合很有关系&#xff0c;所以在看此文章前请掌握&#xff1a; 加法原理乘法原理A(m,n)计算公式及其原理C(m,n)计算公式及其原理 前言 今天您将会学习到基本的卡特兰数及其应用。 一、卡特兰数是什么&#xff1f; 卡特兰数&#xff08;Catalan number&#xff0…...

若依前端vue设置子路径

若依前端vue设置子路径 说明&#xff1a;本文档中以前后端分离版为例&#xff0c;版本为:3.8.6 一设置变量 在.env.development和.env.production 中定义一个变量如VUE_APP_PROJECT_IDENTIFIER # 项目标识字符 VUE_APP_PROJECT_IDENTIFIER admin二引用路径变量 ${process…...

Vue中使用pdf.js实现在线预览pdf文件流

以下是在Vue中使用pdf.js实现在线预览pdf文件流的步骤&#xff1a; 1. 安装pdf.js npm install pdfjs-dist2. 引入pdf.js 在需要使用的组件中&#xff0c;使用以下代码引入pdf.js&#xff1a; import pdfjsLib from pdfjs-dist3. 加载pdf文件流 使用pdf.js的getDocument()方…...

态、势、感、知与时空、关系

态势感知是一种通过收集、整合、分析和解释大量的时空数据&#xff0c;以获取关于特定领域、地区或事件的全面理解的过程。时空和关系在态势感知中扮演着非常重要的角色。 态&#xff1a;态指的是物体或系统所处的状态或状况。在不同的态下&#xff0c;物体或系统的性质、行为和…...

D. Paths on the Tree

Problem - 1746D - Codeforces 思路&#xff1a;先分析一下题意&#xff0c;根据第一条性质&#xff0c;每次只能够从1开始&#xff0c;而第二条性质则表明对于每个节点来说&#xff0c;经过这个节点的子节点的路径条数应该尽量均衡&#xff0c;最大值与最小值相差不能超过1&am…...

CocosCreator3.8研究笔记(九)CocosCreator 场景资源的理解

相信很多朋友都想知道&#xff0c; Cocos Creator 资源的定义&#xff1f; Cocos Creator 常见的资源包含哪些&#xff1f;Cocos Creator 资源的管理机制是什么样的&#xff1f; Cocos Creator 中所有继承自 Asset 的类型都统称资源 &#xff0c;例如&#xff1a;Texture2D、Sp…...

大数据课程L1——网站流量项目的概述整体架构

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解网站流量项目的案例概述; ⚪ 了解网站流量项目的数据埋点和采集; ⚪ 了解网站流量项目的整体架构; 一、网站流量项目概述 1. 背景说明 网站流量统计是改进网站服务的重要手段之一…...

提升数据库安全小技巧,使用SSH配合开源DBeaver工具连接数据库

title: 提升数据库安全小技巧&#xff0c;使用SSH配合开源DBeaver工具连接数据库 categories: 独立博客的方方面面 前段时间, 未来降低网址运行成本&#xff0c;搭了一套Mysql Docker 数据库, 包括外部链接&#xff0c;数据备份&#xff0c;数据导出&#xff0c;数据恢复一套解…...

信息安全技术概论-李剑-持续更新

图片和细节来源于 用户 xiejava1018 一.概述 随着计算机网络技术的发展&#xff0c;与时代的变化&#xff0c;计算机病毒也经历了从早期的破坏为主到勒索钱财敲诈经济为主&#xff0c;破坏方式也多种多样&#xff0c;由早期的破坏网络到破坏硬件设备等等 &#xff0c;这也…...

java项目基于 SSM+JSP 的人事管理系统

java项目基于 SSMJSP 的人事管理系统 博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 大家好&#xff0c;今天和大家聊的是 Java 基于 SSM 的人事管理系统。…...

【Node.js】—基本知识点总结

【Node.js】—基本知识总结 一、命令行常用操作 二、Node.js注意点 Node.js中不能使用BOM和DOM操作 总结 三、Buffer buffer是一个类似于数组的对象&#xff0c;用于表示固定长度的字节序列buffer的本质是一段内存空间&#xff0c;专门用来处理二进制数据 特点&#xff1a;…...

Leetcode.174 地下城游戏

题目链接 Leetcode.174 地下城游戏 hard 题目描述 恶魔们抓住了公主并将她关在了地下城 d u n g e o n dungeon dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公…...

python实现adb辅助点击屏幕工具

#!/usr/bin/env python # -*- coding: utf-8 -*-import re import os import time import subprocess import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk# 设置ADB路径&#xff08;根据你的系统和安装路径进行调整&#xff09; ADB_PATH C…...

智能合约安全分析,针对 ERC777 任意调用合约 Hook 攻击

智能合约安全分析&#xff0c;针对 ERC777 任意调用合约 Hook 攻击 Safful发现了一个有趣的错误&#xff0c;有可能成为一些 DeFi 项目的攻击媒介。这个错误尤其与著名的 ERC777 代币标准有关。此外&#xff0c;它不仅仅是众所周知的黑客中常见的简单的重入问题。 这篇文章对 …...

nodejs 爬虫 axios 异步爬虫 教程 【一】

axios 自定义headers axios.defaults.headers.common["User-Agent"] "Googlebot/2.1 (http://www.google.com/bot.html)"; 运行环境&#xff1a; node &#xff1a;v18 const axios require("axios"); axios.defaults.headers.common["U…...

Swift学习笔记三(Dictionary 篇)

1 Dictionary 概念 字典储存无序的互相关联的同一类型的键和同一类型的值的集合。字典类型的全写方式 Dictionary<Key, Value>&#xff0c;简写方式 [Key: Value]&#xff0c;建议使用简写方式。字典的 key 必须是可哈希的。 2 Dictionary创建 2.1 初始器创建方式 2.2 …...

javax.mail 遇到501 mail from address must be same as authorization user 的問題

使用不同的兩個帳戶发送email时&#xff0c;第一个账户可以发送成功&#xff0c;但到第二个账户的时候就报出了501 mail from address must be same as authorization user的错误。 具体代码如下&#xff1a; import java.util.Date; import java.util.List; import java.util.…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

FastAPI 教程:从入门到实践

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

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...