类(包括模板类)构造函数是真实的构造函数;然而模板构造函数,其实质是模板函数。两者不能混为一谈。在一个模板类中,构造函数和模板构造函数同时存在时,优先调用构造函数。只有当确切符合模板构造函数的接口时,才调用模板构造函数。编译器永远不会把模板构造函数视为构造函数,即使客户没有自己定义拷贝构造函数,编译器也会生成一个默认的拷贝构造函数,这种情况同样存在于拷贝赋值函数和模板拷贝赋值函数。请看下面的例子:
#include <iostream>
using namespace std;
template <typename T>
class TempClass{
public:
T d;
//两个构造函数,其中第二个是拷贝构造函数
TempClass<T>(T _d=0):d(_d){cout<<"This is TempClass Constructor1. "<<endl;};
TempClass<T>(TempClass<T> &_tmp):d(_tmp.d){cout<<"This is TempClass Constructor2. "<<endl;};
template <typename O> //模板构造函数
TempClass<T>(TempClass<O> &_tmp):d(_tmp.d){cout<<"This is a template constructor, not a TempClass Constructor."<<endl;};
};
int main()
{
TempClass<int> a;
TempClass<int> b(a); //调用拷贝构造函数,即使在该模板类中用户没有自定义该函数,编译器也会生成一个默认拷贝构造函数。因为编译器永远不会认为一个模板构造函数是一个构造函数
TempClass<double> c(a); //调用模板拷贝构造函数
return 0;
}
输出结果是:
>This is TempClass Constructor1.
>This is TempClass Constructor2.
>This is a template constructor, not a TempClass Constructor.
PS:具体可以参考《Exceptional C++》之Item5
发表评论
-
const 与static 关键词在c 和 c++中的作用
2012-08-11 11:49 999一.C语言中的const ... -
error LNK2005 and error LNK2019
2012-08-09 23:08 1175error LNK2005 and error LNK2019 ... -
LIBCD.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSV
2012-08-07 09:20 1442LIBCD.lib(crt0dat.obj) : error ... -
在VS2010下配置VC++ Directories
2012-08-07 08:29 10991:可以 在“class View” 面板 -> 右 ... -
零星笔记,待整理
2010-11-01 13:00 510//用 getline 函数从输入读取整行内容。然后为 ... -
VC: error LNK2019:unresolved external symbol *** referenced in function ***的解决方案
2010-10-30 21:13 2141当头文件中声明了一个函数,但是在相应的源文件中却没有对该函数进 ... -
stdcall cdecl fastcall thiscall naked call的具体含义
2010-10-30 18:54 984在C语言中,假设我们有 ... -
#define总结 (网上资料汇集)
2010-10-30 08:06 7441. 定义简单的常数:定义常量,便于修改(切不可在后面加上分号 ... -
(zz)编译与使用Qt4,Visual Studio Express 2008
2010-10-14 22:35 1412一、Qt版本 我现在用的是4.5.2。好像前段时间4.6出来 ... -
strcat 内部实现
2010-09-21 00:43 1828char * strcat(char * dest, ... -
deep copy & shallow copy
2010-09-15 19:27 852A shallow copy of an object cop ... -
reinterpret_cast的本质(转)
2010-09-14 23:15 1644先看看下面的代码: #include <iostr ... -
C++ 经典书籍
2010-09-14 16:18 1723下载地址: http://www.51cnnet.net/di ... -
内存对齐的规则以及作用
2010-09-14 00:14 709首先由一个程序引入话 ... -
[转]C++ reinterpret_cast,const_cast等 显式类型转换总结
2010-09-13 23:23 1054#include<iostream.h> ... -
C++提供了四种新的类型强制
2010-09-13 23:13 719static_cast const_cast reinte ... -
C++著名程序库的比较和学习经验
2010-09-13 19:30 8631、C++各大有名库的介绍——C++标准库 2、C++各大有名 ... -
c++ library and resource List
2010-09-13 18:56 9301,前言 无数次听 ... -
C++中操作符operator的两种用法
2010-09-12 02:23 11481.operator overloading C++可能通过o ... -
两种自动类型转换:构造函数与operator
2010-09-12 02:23 928如果有两个对象:one, two, 要想把one转换成为two ...
相关推荐
内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚函数、模板和包容器...
- **模板拷贝构造函数**:如示例代码所示,模板函数不能作为拷贝构造函数,因为它们不改变语言规则,编译器仍然会自动生成默认的拷贝构造函数。 5. **示例代码分析**: 在提供的代码中,`X::X(const T&)`、`X::X...
实验报告的主题是“简单类与函数模板”,涵盖了C++中的面向对象编程和泛型编程的基础概念。以下是关于这些知识点的详细说明: 1. **简单类(Simple Class)**: - 在C++中,类是一种用户自定义的数据类型,它封装...
本文档提供了一系列针对C++开发者常见的面试题目及其解答,涵盖了构造函数与析构函数的概念、深拷贝与浅拷贝的区别、虚函数的作用、RAII编程准则的应用、实现多重继承的方法及可能引发的问题,还有智能指针的各种...
本资源集合包含了多个关于C++编程概念和特性的图像文件,具体内容涵盖了排序算法、内存管理、迭代器使用、拷贝构造函数等多个方面。以下是对每项资源的简要描述: 1. Hoare Sort (hoareSort.png): 描述了霍耳排序...
- 拷贝构造函数:如 `LinkedList(const LinkedList<T>& L);` 用于创建一个与现有链表相同的链表副本。 - 析构函数:如 `~LinkedList(void);` 在链表销毁时释放所有节点占用的资源。 - 重载赋值运算符:如 `...
拷贝构造函数是另一个重要的构造函数,用于创建一个对象的副本。浅拷贝(Shallow Copy)仅仅复制对象的数据成员的值,而不复制动态分配的内存,可能导致两个对象共享同一块内存,改变一个对象会影响到另一个。深拷贝...
构造函数初始化这些成员,`Vector`的拷贝构造函数和赋值运算符重载确保正确地复制元素。`push_back()`函数用于在末尾添加元素,如果容量不足则调用`resize()`来扩展数组。`resize()`方法会根据当前大小和容量来决定...
在C++编程语言中,模板是一种强大的工具,用于创建具有通用性的函数和类。模板的使用使得代码更加灵活,能够处理多种数据类型,而无需重复编写相同功能的多个版本。这里我们将深入探讨模板、拷贝构造和赋值运算的...
3. **拷贝构造函数**:当一个对象被创建为另一个对象的副本时,拷贝构造函数会被调用。它接收一个同类型的引用作为参数,用于深拷贝或浅拷贝数据成员。 4. **赋值运算符重载**:C++中的赋值运算符(=)可以被重载以...
华为 C++ 培训资料 经典 ...word讲解C++语言中级教材讲授C++语言的运用技术,包括:类、对象之间的关系、对象的存储与布局、运算符重载、智能指针、仿函数、泛型编程,C++模式设计基本思想。下载看吧
7. **拷贝构造函数调用**:当对象通过初始化列表或赋值运算符创建时,或者在函数参数传递和返回值中,可能会调用拷贝构造函数。 8. **构造函数与普通函数**:构造函数在对象创建时自动调用,用于初始化对象的状态;...
在实验中,`Person`类被定义为具有私有成员变量`pName`和公有成员函数如构造函数、拷贝构造函数和析构函数等。通过这种方式,类能够隐藏其内部细节,仅暴露必要的接口供外部调用,这体现了封装性原则。 ### 深入...
4. **拷贝构造函数**:拷贝构造函数用于复制已存在的对象,其参数通常是该类对象的引用。当一个对象被赋值给另一个对象,或者作为函数参数传递时,拷贝构造函数会被调用。默认的拷贝构造函数执行浅复制,但可以...
在LAB中,你可以找到如何定义和使用拷贝构造函数的示例。 静态变量是C++中的另一个关键特性。静态变量在内存中只有一份,不论创建了多少对象,它们都共享同一份存储。这使得静态变量在类的所有实例间保持共享状态。...
// 调用test的拷贝构造函数 test<double> t3(t1); // 调用模板构造函数,将test转换为test return 0; } ``` 在这个例子中,`test<double> t3(t1)`调用的是模板构造函数,实现了从`test<int>`到`test<double>`的...
在C++标准模板库(STL)中,`std::string`类是一个极其重要的容器,它专门用于存储、操作和管理字符串数据。标题中的“string类的构造方法”揭示了我们要探讨的核心内容——如何初始化和创建`std::string`对象。`std...
这篇内容涉及了C++编程语言中的多个关键概念,包括多态、模板、const、拷贝构造函数(深拷贝)以及析构函数和继承等。让我们逐一详细解释这些知识点。 1. **多态(Polymorphism)**:多态是指同一种行为可以有不同...
- **函数模板实参推断**:7.5C++函数模板的实参推断.html详细阐述了编译器如何根据函数调用时的实际参数自动推断模板参数的过程,这是C++模板使用中极其重要的部分。 - **显式具体化**:7.6C++模板的显式具体化....