类模板的实现

news/2025/11/25 22:40:04/文章来源:https://www.cnblogs.com/losobo/p/19270339

pragma once

include

using namespace std;
template
class Myvector
{
friend ostream& operator<< (ostream& out, const Myvector & othervectr); //用有元函数重载输出运算符 ,注意必须要加
public:
Myvector(int zise=128);
Myvector(const Myvector & othervectr); //拷贝构造函数
T& operator [](int index); //实现下标访问的重载操作

Myvector& operator =(const Myvector & othervectr);
~Myvector();
int getlen();

private:
int len;
T* basedate; //存储数组的元素
};

include "Myvector.h"

include<Windows.h>

template
Myvector::Myvector( int zise)
{
if ( zise>0)
{
this->len = zise;
this->basedate = new T[len]; //给basedate 分配内存,实际上已经指向了数组 Myvector
}
}

template
Myvector::Myvector(const Myvector& othervectr)
{
// 根据传入的对象元素个数分配内存空间
this->len = othervectr.len;
this->basedate = new T[len];
for (int i=0;i<len;i++)
{
this->basedate[i] = othervectr.basedate[i];
}
}
template
T& Myvector::operator[](int index) //通过下标访问数组的元素
{
return basedate[index]; //此时的 basedate[index] 相当于 数组a[i]
}
template
Myvector& Myvector::operator=(const Myvector& othervectr)
{

if (this->basedate != NULL)
{delete[] this->basedate;this->basedate = NULL;this->len = 0;
}// 根据传入的对象元素个数分配内存空间
this->len = othervectr.len;
this->basedate = new T[len];
for (int i = 0; i < len; i++)
{this->basedate[i] = othervectr.basedate[i];
}
return *this;

}

template
Myvector::~Myvector()
{
if (basedate!= NULL)
{
delete[] basedate;
basedate = NULL;
len = 0;
}
}

template
int Myvector::getlen()
{
return this->len;
}
template
ostream & operator<<(ostream& out, const Myvector& othervectr) //注意这里没有
{
for (int i=0; i< othervectr.len;i++)
{
if (i!= othervectr.len-1)
{
out << othervectr.basedate[i] << ",";
}
else
{
out << othervectr.basedate[i];
}

 }return out;

}

include<Windows.h>

include"Myvector.cpp"

include

using namespace std;
int main()
{
Myvector myvect1(9);

for (int i = 0; i < myvect1.getlen(); i++)
{myvect1[i] = i*3+4;
}
cout << myvect1<<endl;     //调用输出运符重载 Myvector<string> myvect2(3) ;
myvect2[0] = "张三";
myvect2[1] = "李四";
myvect2[2] = "老五";Myvector<string> myvect3(myvect2);    //调用拷贝构造函数Myvector<string>myvect4(1);myvect4 = myvect3; //调用重载运算符for (int i = 0; i < myvect2.getlen(); i++)
{cout << "输出数组myvect2的第" << i << "个元素:" << myvect2[i] << endl;if (i == myvect2.getlen() - 1){cout << "--------默认构造函数调用----------\n\n";}
}for (int i = 0; i < myvect3.getlen(); i++)
{cout << "输出数组myvect3的第" << i << "个元素:" << myvect3[i] << endl;if (i== myvect3.getlen()-1){cout << "--------拷贝构造函数调用----------\n\n";}
}for (int i = 0; i < myvect4.getlen(); i++)
{cout << "输出数组myvect4的第" << i << "个元素:" << myvect4[i] << endl;if (i == myvect4.getlen() - 1){cout << "--------重载运算符调用----------\n\n";}
}////cout << "数组的长度:" << myvect.getlen() << endl;
//int a[10]= { 89, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
////int len = sizeof(a) / (a[0]);    //求数组的长度
//for (int i=0; i< 10; i++)
//{
//	cout<<"输出数组的第"<<i+1<<"个元素:"<<a[i]<<endl;
//}////数组名实际上是一个指向数组第一个元素的常量指针
//cout << "通过数组名输出数组的第一个元素:" << *a << endl;  
system("pause");
return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/976549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rime(小狼毫)+雾凇+皮肤+万象大模型+个人词库补充

rime(小狼毫)+雾凇+皮肤+万象大模型+个人词库补充 在使用rime一段时间后,以下是我的配置心得 很多配置都基于ymal文夹,可以先去稍微了解一些yaml格式,不符合yaml格式的修改是不会生效的 (简单介绍 冒号后面一定要有…

2025年中国前五大轮胎品牌:专业测评与选购指南

2025年中国前五大轮胎品牌:专业测评与选购指南在当前产业转型与消费升级交汇的关键节点,“中国前五大轮胎品牌”已成为资本市场、主机厂供应链与广大消费者研判行业走势与品质选择的核心议题。为给行业及消费者提供基…

lru_cache装饰器的缓存清除机制原理

lru_cache 装饰器的缓存清除机制核心围绕 LRU(Least Recently Used,最近最少使用)算法 展开,仅在特定条件下触发清除,且分为「被动淘汰」「主动清除」「隐式清除」三类场景。以下是详细拆解: 一、核心:LRU 淘汰…

2025年中国前十大轮胎品牌:最新官方榜单深度解析

2025年中国前十大轮胎品牌:最新官方榜单深度解析在当前汽车产业加速重构与消费升级并行的新周期,“中国前十大轮胎品牌”已成为资本市场、主机厂供应链与广大消费者研判行业走向的核心坐标。为给行业及消费者提供基于…

网格图分治模型

若网格图面积为 \(S\),取短边分治,令分治层的复杂度和短边相关(一般是从短边上每个点出发对整个网格图 DP/搜索 之类的)。 因为短边长度 \(O(\sqrt S)\)(一般)一层复杂度是 \(O(S\sqrt S)\),总复杂度 \(T(S)=2T…

Python内置的lru_cache装饰器实现缓存教程

functools.lru_cache 是 Python 内置的函数缓存装饰器,基于「最近最少使用(LRU)」策略管理缓存,能自动缓存函数的调用结果,避免重复执行高耗时函数(如复杂计算、数据库查询)。以下是它的完整使用指南,包含基础…

2025年轮胎品牌推荐:权威TOP10全球品牌综合排名

2025年轮胎品牌推荐:权威TOP10全球品牌综合排名在当前汽车消费加速升级与新能源浪潮席卷的时代背景下,“轮胎品牌推荐”已成为广大车主、整车厂商及资本市场研判赛道格局的核心议题。面对琳琅满目的品牌阵列与繁杂的…

详细介绍:Git分支合并实战指南:从feature到master,一文搞定全流程!

详细介绍:Git分支合并实战指南:从feature到master,一文搞定全流程!pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

北京墙体彩绘公司推荐香鲸艺术坊,行业排名遥遥领先!

墙体彩绘作为空间美学升级的核心方式,在北京商业场景引流、家装个性定制、政企文化建设等领域需求持续攀升。本文基于市场口碑调研、服务案例落地、环保资质审核、售后保障能力四大核心维度,整理出北京墙体彩绘行业综…

虚拟科学峰会推动技术交流创新

文章探讨了疫情期间科学会议向虚拟形式转变的趋势,重点分析了某中心消费者科学峰会的线上举办经验,涉及机器学习、优化算法等技术领域,并讨论了虚拟会议对科研协作模式带来的深远影响。虚拟科学会议:技术驱动的新交…

java---gradle配置国内镜像

在进行java开发项目的时候,相比maven来说,gradle更好用一些。但是由于服务器在国外,下载资源就很慢,超时还会报异常。 方法一:使用本地Gradle打开腾讯云Gradle镜像页面:https://mirrors.cloud.tencent.com/gradl…

2025年11月南京装修公司综合实力排行榜(品牌智鉴榜推荐)

品牌智鉴榜评测,2025年11月,品牌智鉴榜联合第三方权威测评机构,基于设计能力、施工品质、售后响应、价格透明度等12项核心指标,完成对全市60余家正规装修企业的综合测评,发布《2025年11月南京装修公司综合实力排行…

揭开Claude Opus 4.5神秘面纱

揭开Claude Opus 4.5神秘面纱一位对 AI 充满好奇的学习者——揭开 Claude Opus 4.5 的神秘面纱,清晰展示它在软件工程、安全性和多语言处理等领域取得的革命性进步。1. 软件工程领域的“超强大脑”无人能及的工程能力…

Image图片组件基础加载与属性设置

# Image图片组件基础加载与属性设置 ## 前言 在HarmonyOS应用开发中,Image组件是展示图片内容的核心组件。本文将全面讲解Image组件的各种使用方法和属性设置,帮助开发者快速掌握图片显示的相关技能。 **官方参考资料…

2025年新能源汽车轮胎推荐:独家负载与静音测评报告

2025年新能源汽车轮胎推荐:独家负载与静音测评报告在新能源汽车渗透率持续攀升的背景下,如何解决用户在“新能源汽车轮胎推荐”上的选择难题,已成为关乎每一位车主出行品质的核心议题。相较于传统燃油车,新能源车因…

11月25日日记

1.今天上午工程实训,下午英语视听说 2.明天上马哲 3.@RequestParam 和 @RequestBody 的使用场景区别?JSON 数据如何正确接收?

CF370A-Rook, Bishop and King

CF370A-Rook, Bishop and King 题目大意 国际象棋棋盘上有两个位置,现在问一个车,象和王,从一个位置走到另一个位置的最少移动次数。 题解 对于所有,如果两个点重合,则都为 \(0\) 。 对于车,如果同行同列则为 \(…

实用指南:基于“开源AI智能名片链动2+1模式S2B2C商城小程序”的会员制培养策略研究

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年越野轮胎推荐:十大专业品牌最新全地形解析

2025年越野轮胎推荐:十大专业品牌最新全地形解析为解决用户在“越野轮胎推荐”上的选择难题,本文将基于全球主流汽车媒体(如《AutoBild》、汽车之家等)的公开评测模型与数据,从以下四大核心维度,对市场上的主流旗…

11月25日

上午工程实训,下午英语课