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

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

MySQL 8.0 事务全面讲解

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

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

【免杀】C2免杀技术(十五)shellcode混淆uuid/ipv6/mac

针对 shellcode 混淆(Shellcode Obfuscation) 的实战手段还有很多,如下表所示: 类型举例目的编码 / 加密XOR、AES、RC4、Base64、Poly1305、UUID、IP/MAC改变字节特征,避开静态签名或 YARA结构伪装PE Stub、GIF/PNG 嵌入、RTF OLE、UUID、IP/MAC看起来像合法文件/数据,弱…...

Java毕业设计:办公自动化系统的设计与实现

JAVA办公自动化系统 一、系统概述 本办公自动化系统基于Java EE平台开发&#xff0c;实现了企业日常办公的数字化管理。系统包含文档管理、流程审批、会议管理、日程安排、通讯录等核心功能模块&#xff0c;采用B/S架构设计&#xff0c;支持多用户协同工作。系统使用Spring B…...