C++学习笔记

来源:互联网 发布:铃声制作软件 编辑:程序博客网 时间:2024/05/02 04:20

我在鸡啄米的网站上学习C++编程入门系列之十六(类与对象:类模板)

原帖网址在这里:http://www.jizhuomi.com/software/55.html


里面提到了这样一个概念:类模板的构造函数 

我没有看懂


于是我搜集了一些代码 放在下面

1. 模板类构造函数放在外面

#include "stdafx.h"#include <iostream>using namespace std;      #include <stdio.h>template <class T> //模板类声明开始class abc{public: abc(T ab){m_abc=ab;} //构造函数 T get(){return m_abc;}private: T m_abc; //数据是私有的}; //模板类声明结束void main() //main函数{ abc<int> a(123); printf("%d\n",a.get()); system("pause");}
这里就是先声明了一个模板类叫做T 但是你也不知道这个T以后会是什么

然后又声明了一个类叫做abc 

那么最后在main函数中就声明了一个变量叫做 a 

a的类型是abc 但是同时又指定了类型是abc中的int 同时初始化为123

最后打印abc类中get函数的返回值 (123)


2. 模板类构造函数放在里面

#include "stdafx.h"#include <iostream>using namespace std;template <class T> class abc{public: abc(T ab); T get();private: T m_abc;};template <class T> abc<T>::abc(T ab):m_abc(0){ m_abc=ab;}template <class T> T abc<T>::get(){ return m_abc;}void main(){ abc<int> a(123); printf("%d\n",a.get()); system("pause");}
观察这两个,我们可以发现不同之处在于,如果要在类外定义构造(成员)函数,那么一般要遵循这样的方法:

对于构造函数,需要遵循组合类构造函数定义(注意不是声明)的一般形式:

类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表),...
       {
                 类的初始化
       }

比如这里的

abc<T>::abc(T ab):m_abc(0)
abc就是类名 只不过是加入了可能的模板类T

中间的是这个构造函数的形参表 类型是T 名称是ab

最后是内前对象m_abc 初始化为0 (初始化为任何一个数字都是可以的,应该是)


对于成员函数 就只需要遵循一般的规矩即可

返回值 类 函数名称(变量表)

所以

T abc<T>::get()

之所以会出现这种不同 就是因为构造函数不允许有返回类型

又尝试了一下 这样也是可以的

abc<T>::abc(T ab)//构造函数

abc<T>::get() //成员函数

这样看他俩就是一样的了!


0 0
原创粉丝点击