C++ Array容器的显示和隐式实例化详细介绍

 更新时间:2022年10月19日 09:32:23   作者:Peak@  
这篇文章主要介绍了C++中Array容器的隐式实例化和显式实例化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

提到Array容器的隐式实例化和显式实例化,不得不先说说Array的类模板。

类模板自己本身并不是一个类型和对象,模板必须进行实例化,实例化分为隐式和显式两种。

隐式实例化:在需要一个完整定义类型的代码中,如果该类型是通过某个模板来提供,就会发生模板的隐式实例化。

显式实例化:常用在模板的接口与实现分离的场合,显式实例化效率较高。

下面创建了Array的类模板和实例化:

1、Array的类模板和隐式实例化

//arraytp.hpp
#pragma once
template<typename T, size_t N>
class Array
{
public:
	using size_type = size_t;
	//遍历array
	void traverse() {
		for (const auto& e : arr) {
			std::cout << e << ' ';
		}
		std::cout << '\n';
	}
	T& operator[](size_type i) {
		return arr[i];
	}
private:
	T arr[N];
};
// Arrytest.cpp
#include <iostream>
#include"arraytp.hpp"
int main()
{
    //定义一个长度为9的Array数组容器
    Array<int, 9> ia;
    //给ia赋值
    for (int  i = 0; i < 9; i++)
    {
        ia[i] = i;
    }
    //遍历ia
    ia.traverse();
    return 0;
}

运行结果:

2、Array类模板的接口和实现

显式实例化:

//arraytp.hpp
#pragma once
template<typename T, size_t N>
class Array
{
public:
	using size_type = size_t;
	void traverse();
	T& operator[](size_type i);
private:
	T arr[N];
};
//m1.cpp
#include<iostream>
#include<string>
#include "arraytp.hpp"
template<typename T,size_t N>
//遍历Array
void Array<T, N>::traverse() 
{
	for (const auto& e : arr) {
		std::cout << e << ' ';
	}
	std::cout << '\n';
}
template<typename T,size_t N>
T& Array<T, N>::operator[](size_type i) 
{
	return arr[i];
}
//在类模板中创建了三个显式类型
template class Array<int, 9>;
template class Array<double, 9>;
template class Array<std::string, 9>;
// ArryDisplay.cpp
#include <iostream>
#include"arraytp.hpp"
void assignment();
int main()
{
    assignment();
}
void assignment()
{
	//定义一个长度为9的Array数组容器
	Array<double, 9> ia;
	//给ia赋值
	for (int i = 0; i < 9; i++) {
		ia[i] = i;
	}
	//遍历
	ia.traverse();
}

运行结果:

在显式实例化中是将模板的接口和实现分离了,同时在模板的实现中又三个显式类型,显式实例化还可以减少编译时间和对象大小。

.hpp文件是.h头文件和.cpp源文件的结合,.h文件放声明,.cpp文件放实现,而.hpp文件就是将声明和实现放在一起。

size_t是标准C库中定义的,它是一个基本的与机器相关的无符号整数的C/C++类型。

参考书籍:Accelerated C++和Cpp_Primer_5

到此这篇关于C++ Array容器的显示和隐式实例化详细介绍的文章就介绍到这了,更多相关C++ Array容器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C和C++的区别详解

    C和C++的区别详解

    这篇文章主要介绍了C和C++之间的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-10-10
  • solaris操作系统做c应用程序开发步骤

    solaris操作系统做c应用程序开发步骤

    solaris操作系统做c应用程序开发步骤,大家参考使用吧
    2013-12-12
  • Windows平台下配置VS Code的C++环境教程

    Windows平台下配置VS Code的C++环境教程

    这篇文章主要介绍了Windows平台下配置VS Code的C++环境教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • C语言植物大战数据结构希尔排序算法

    C语言植物大战数据结构希尔排序算法

    这篇文章主要为大家介绍了C语言希尔排序算法实现植物大战示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 如何在C语言的宏中使用类型关键字

    如何在C语言的宏中使用类型关键字

    如何在C语言的宏中使用类型关键字呢?以下是实现方法。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • C语言指针与引用的区别以及引用的三种用法案例详解

    C语言指针与引用的区别以及引用的三种用法案例详解

    这篇文章主要介绍了C语言指针与引用的区别以及引用的三种用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • C语言之system函数案例详解

    C语言之system函数案例详解

    这篇文章主要介绍了C语言之system函数案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • c/c++输出重定向的方法

    c/c++输出重定向的方法

    c/c++输出重定向的方法,需要的朋友可以参考一下
    2013-03-03
  • VC++角色游戏中的人物初始化模块代码实例

    VC++角色游戏中的人物初始化模块代码实例

    这篇文章主要介绍了VC++角色游戏中的人物初始化模块,对大家学习VC++有一定的帮助,需要的朋友可以参考下
    2014-08-08
  • C++学习进阶之Makefile基础用法详解

    C++学习进阶之Makefile基础用法详解

    Makefile 通常指的是一个含有一系列命令(directive)的,通过 Make自动化编译工具,帮助 C/C++ 程序实现自动编译目标文件的文件,这篇文章主要给大家介绍了关于C++学习进阶之Makefile基础用法的相关资料,需要的朋友可以参考下
    2021-07-07

最新评论