函数模板:
template<class TT>
void Tswap(TT &t1,TT &t2){
TT t = t1;
t1 = t2;
t2 = t;
}
具体化函数模板:
struct people{
string name;
int age;
};
template<>void Tswap<people>(people &p1,people &p2){
int age = p1.age;
p1.age = p2.age;
p2.age = age;
}
实例化函数模板:
template<class T>
void Tswap(T &t1,T &t2,T &t3){
cout<<"22223333"<<endl;
}
//这里的函数定义相当于是对上面函数的实例化,所以叫实例化函数模板
template void Tswap<people>(people &p1,people &p2,people &p3);
类模板:
template<class TTT>
class TestPeople{
public:
TestPeople(TTT &p1,TTT &p2){
cout<<"construct"<<endl;
}
};
int main(){
people p1 = {"mick",21};
people p2 = {"jick",31};
people p3 = {"tom",35};
TestPeople<people> p(p1,2);
getchar();
return 0;
}
复制构造函数:
系统会默认为类创建一个复制构造函数,把成员变量复制到新的对象中:
template<class TTT>
class TestPeople{
public:
TestPeople(TTT &p1,TTT &p2){
cout<<"construct"<<endl;
t1 = &p1;
t2 = &p2;
}
TestPeople(TestPeople &tp){
cout<<"复制构造函数"<<endl;
}
TTT *t1;
TTT *t2;
};
int main(){
people p1 = {"mick",21};
people p2 = {"jick",31};
people p3 = {"tom",35};
//创建一个对象
TestPeople<people> *p = new TestPeople<people>(p1,p2);
//调用复制构造函数,好像只能通过指针来调用复制构造函数
TestPeople<people> t = (*p);
p1.name = "test";
cout<<p->t1->name<<endl;
cout<<t.t1->name<<endl;
getchar();
return 0;
}
按值传递会自动调用复制构造函数复制一个对象返回:
class TestOperator{
private:
int n;
public:
TestOperator(int x):n(x){
cout<<"构造函数"<<endl;
}
int get(){
return n;
}
//重载了复制构造函数
TestOperator(TestOperator &t){
cout<<"copy con"<<endl;
}
//这里按值返回了一个TestOperator的对象,会调用上面的复制构造函数
TestOperator operator++(){
++n;
cout<<"++运算符"<<endl;
return *this;
}
};
运算符重载:
class TestOperator{
private:
int n;
public:
TestOperator(int x):n(x){
cout<<"构造函数"<<endl;
}
int get(){
return n;
}
TestOperator(TestOperator &t){
cout<<"copy con"<<endl;
}
//重载了++运算符
TestOperator operator++(){
++n;
cout<<"++运算符"<<endl;
return *this;
}
//重载=运算符
void operator=(TestOperator &a){
this->n = a.get();
}
//将对象转换为基本类型
operator int(){
return n;
}
};
int main(){
TestOperator t(2);
TestOperator tt(3);
//调用=重载运算符
tt = t;
cout<<tt.get()<<endl;
//调用operator int()
int i = tt;
cout<<i<<endl;
//这里的调用顺序:调用构造函数,将i传递进去,创建了一个临时对象,然后调用=运算符,将临时对象赋值给ttt
TestOperator ttt = i;
getchar();
return 0;
}
预处理指令中可以使用#运算符,#运算符把其后的任何字符用""引起来
#define show(x) cout<<#x
show(hello world)将输出hello world
##将多个字符串连接成一个字符串
#define show(x) cout<<"show "##x##" student"
show(one) 输出show one student
#if defined 判断某个宏是否已被定义,#是其缩写形式#ifdef,#if !defined的缩写形式是#ifndef
#pragma:
#pragma message("")编译时输出信息
#pragma once 编译时只编译一次
分享到:
相关推荐
C++知识点全概括!
C++知识点 XMind思维导图
在深入探讨C++知识体系之前,我们先来理解一下什么是思维导图。思维导图是一种有效的学习工具,它帮助组织和可视化信息,通过图形方式展示主题的各个分支和子主题,使学习过程更为直观。 现在,让我们逐步展开C++...
"c语言知识体系.png"和"c++知识体系 (2).png"可能是这样的可视化表示,它们将有助于你直观地掌握这两门语言的关键概念和组成部分。 通过深入学习C和C++,开发者可以编写出高效、灵活的代码,并能适应各种复杂项目的...
这个xmind文档适用于初学c++的小白,可以帮助了解一下c++的知识体系,当然这是小编自己制作的,可能不是很全面,想要学习更深入的知识,还需要我们慢慢去... 希望读者看到这个c++知识框图,可以更好的去了解c++,去学习c++!!!
这是用XMind写成的C++知识图谱,有C++的详细知识点
c++知识体系框架图
c++ 知识点整理(XMind)
本文档用于解析C++知识图解,打开时请用XMind软件打开!!!
一、#include “filename.h”和#include 的区别 #include “filename.h”是指编译器将从当前工作目录上开始查找此文件 #include 是指编译器将从标准库目录中开始查找此文件 二、头文件的作用 ...
C++知识结构
《Visual C++知识库》是针对编程语言Visual C++的深度学习资源集合,包含了丰富的理论与实践内容。Visual C++是Microsoft公司推出的一种基于Windows操作系统的集成开发环境,它不仅支持C++语言,还提供了MFC...
【少儿编程C++初级基础知识点】是针对初学者设计的一系列C++编程教学内容,旨在帮助孩子们建立起坚实的编程基础。...C++知识点习题的实践是提高编程技能的关键,让孩子不断挑战和解决实际问题,才能真正掌握编程语言。
卢瑟们的作业展示,答案讲解,以及一些C++知识.zip卢瑟们的作业展示,答案讲解,以及一些C++知识.zip卢瑟们的作业展示,答案讲解,以及一些C++知识.zip卢瑟们的作业展示,答案讲解,以及一些C++知识.zip卢瑟们的作业...
"C++知识点思维导图"为初学者提供了一个全面且系统的C++学习框架,旨在帮助他们快速理解和掌握这门语言的核心概念。 一、基础语法 C++的基础语法包括变量定义、数据类型(如int, float, double, char等)、运算符...
归纳和总结了C++所有的知识要点,理解掌握后即可动手编程或应试
《Visual C++ 知识库》是一个专门为初学者和开发者提供的资源,涵盖了关于Microsoft的Visual C++编程环境的广泛信息。作为一个高效的开发工具,Visual C++不仅支持C++语言,还提供了集成的开发环境(IDE),包括源...
内容概要:本C++知识图谱为原生xmind文件,可二创,包含13个主题:C++基础、类和对象、内存管理、模板、IO流、继承、多态、C++11、异常、智能指针、特殊类设计、C++类型转换、STL、数据结构与算法。 适合人群:C++...
周末闲来无事,把C++的知识点重新梳理了一遍,以思维导图的形式呈现给大家,适合初学者,能很好的入门C++,能全面概括C++的重要知识点,可做收藏,学习巩固C++的重要知识点使用。
内容概要:包括C++每一章节知识点,特别包括重难点、易混淆知识点和易出错知识点(都有用颜色标注出来) 参考书籍:内容依据《c++程序设计第三版....资料为文字、图片并存的形式,生动形象的展现了C++知识点