C++模板类

C++模板类,第1张

第一个问题,刚才两位回的都对:类模板不支持分离只能是类的声明和定义放在同一个文件中。

第二个问题:你问的是普通编译器的工作原理,还是解释执行编译器的工作原理。他们是不太一样的,分别给你介绍一下:

1.编译器的原理市面上书此顷籍大多一样,看清华的《编译原理》即可,作为了解。编译原理的核心是一种文法的理解,编译器最早是从图灵机开始的,有限/无限自动机原知禅理(这个就比较老了,而且理论性较强,我有一本外文自动机原理的电子版,如有需要留邮箱)。首先编译器要具有一种文法识别功能,把表达式的各标志、变量、运算符等等储存起来,然后link变成可执行文件(中间穿插语法分析等)。

2.解释性编译器执行效率低,它的前半部分和普通编译器一样,同样有词法分析、语法分析,但是它没有link连接,而森猛陆是解释一遍就执行一遍,效率低,小程序可以。

“编译原理”是一门学科,不可能我三言两语就讲清楚,建议你多学多看多留心,自己悟出其中的奥妙。

后来你说的这个,具体我也不太清楚,我认为的是这样的:C++的处理机制是分模块的,用户自己创建的话,它有一个模块处理,只预编译头文件的话,可以提高编译速度,尤其对于大程序。而设计模板的时候,C++就会调用模板处理模块,那个模块可能就是默认.h和.cpp在一起的,而且你可以想象一下,如果只编译.h的话,如果你的程序中使用了模板的某个具体部分,C++还是需要处理模板中.cpp的部分,而这部分没有被编译,会出问题的。也就是说,你编了一个具有公共使用功能的模板,这个模板的每个部分对于C++来说,都是很必要的。

#include <cstdio>

#include <string>

#include <iostream>

using namespace std

template <class T>

class Student

{//Student 模板类

private:

string Name

int Sno

T Score[3]//镇郑成绩 数学 英语 计算机

T sum//总分

T avg//平均分

public:

Student(string name,int sno,T* p)//构造函数链哗

{

Name = name

Sno = sno

for (int i = 0i <3i++)

Score[i] = p[i]

sum = 0

avg = 0

}

void score_cal()//计算平均分和总分

{

for (int i = 0i <3i++)

{

sum += Score[i]

}

avg = sum / 3

}

T get_sum() {return sum}

T get_avg() {return avg}

void display()//学生信息展示

{

cout <<Sno <<"御唤颂 " <<Name <<" " <<Score[0]

<<" " <<Score[1] <<" " <<Score[2]

<<" " <<sum <<" " <<avg <<endl

}

}

int main()

{//主函数

int score[] = {87,78,84}

Student <int>stu("小红",1,score)//实例化对象

stu.score_cal()//调用计算成绩方法

cout <<"学号" <<" " <<"姓名" <<" " <<"数学" <<" " <<"英语"

<<" " <<"计算机" <<" " <<"总分" <<" " <<"平均分 " <<endl

stu.display()//展示学生信息

return 0

}

我发个简单的类模板程序(求两个任意类型数的和)。

template<class T>

class A

{

public:

A()

A(T _a,T _b)

T sum()

private:

T a

T b

}

template <class T>

A<T>::A()

{

a=0b=0

}

template<class T>

A<T>::A(T _a,T _b)

{

a=_ab=_b

}

template<class T>

T A<T>::sum()

{

return (a+b)

}

void main()

{

A<int>ai(3,4)

A<double>ad(3.1,4.0)

cout<<ai.sum()<<" "<<ad.sum()<<endl

}

程序已经在vc6.0下调试通过,你自裤尺己看看吧。

以上代码在一个戚纯卜文件中,别把类高穗的声明放在一个.h中把实现放在.cpp中,类模板不支持分离只能是类的声明和定义放在同一个文件中。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12275787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存