首页 > 编程语言 >C++快速入门 第四十六讲:内联模板

C++快速入门 第四十六讲:内联模板

时间:2023-08-18 15:44:58浏览次数:44  
标签:intStack 函数 int C++ Stack 内联 data 第四十六 size

内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时类似宏替换,使用函数体替换调用处的函数名。(在程序中,调用其函数时,该函数在编译时被替换,而不是像一般函数那样是在运行时被调用)

实例:栈

 1 #include <iostream>
 2 #include <string>
 3 
 4 template <class T>
 5 class Stack//栈类 
 6 {
 7 public:
 8     Stack(unsigned int size = 100)//构造器 
 9     {
10         this->size = size;
11         data = new T(size);
12         sp = 0;
13     } 
14     ~Stack()//析构器
15     {
16         delete []data;//删除数组
17     } 
18     void push(T value)//入栈
19     {
20         data[sp++] = value;
21     } 
22     T pop()//出栈
23     {
24         return data[--sp];
25     }
26 private:
27     unsigned int size;
28     unsigned int sp;
29     T *data; 
30 };
31 
32 int main()
33 {
34     Stack<int> intStack(100);//定义对象 
35     
36     intStack.push(1);//将1推入栈 
37     intStack.push(2);//将2推入栈
38     intStack.push(3);//将3推入栈
39     
40     std::cout << intStack.pop() << "\n";//弹栈
41     std::cout << intStack.pop() << "\n";//弹栈
42     std::cout << intStack.pop() << "\n";//弹栈
43 }

如果类模板需要一种以上的类型,可根据具体情况多使用几个占位符

1 template<class T,class U>
2 
3 class MyClass
4 {
5 //
6 }

实例化(即定义对象)时:

MyClass<int,float>myClass;

标签:intStack,函数,int,C++,Stack,内联,data,第四十六,size
From: https://www.cnblogs.com/ybqjymy/p/17640690.html

相关文章

  • C++快速入门 第四十七讲:容器和算法
    C++标准库提供的向量(vector)类型从根本上解决了数组先天不足的问题(内存固定,如果不用那么多内存编译器也会为其分配)我们用不着对一个向量能容纳多少元素做出限定,因为向量可以动态地随着你往它里面添加元素而无限增大。还可以用它的size()方法查知某给定向量的当前长度(即包含的元素......
  • C++快速入门 第三十六讲:副本构造器
    我们可以把一个对象赋值给一个类型与之相同的变量,编译器将生成必要的代码把“源”对象各属性的值分别赋值给“目标”对象的对应成员。这种赋值行为称之为逐位复制。(但如果某些成员变量是指针的话,对象成员逐位复制的结果是你将拥有两个一模一样的实例,而这两个副本里的同名指针会指......
  • C++快速入门 第三十八讲:避免内存泄漏
    如果程序会运行很长时间(例如在服务器上,注意不是所有的操作系统都像windows一样每天都要重启),并且在不停地申请新的内存块,忘记释放那些已经不再有用的老内存迟早会把内存消耗殆尽,直接导致后边的new操作无法执行甚至崩溃。动态内存是没有作用域的,所以必须由程序员来跟踪它们......
  • C++快速入门 第三十七讲:高级强制类型转换
    实例1:静态强制转换1#include<iostream>2#include<string>34usingnamespacestd;5classCompany6{7public:8Company(stringtheName,stringproduct);9virtualvoidprintInfo();1011protected:12stringname;13......
  • C++快速入门 第二十七讲:运算符左移<<重载
    一般来说,在调用operator<<()重载函数时,传递给它的是哪一个流,它返回的就应该是那个流的一个引用。实例:左移操作符重载1#include<iostream>2#include<string>3#include<math.h>45usingnamespacestd;6classRational//定义基类7{8public:......
  • C++快速入门 第二十八讲:多继承(multiple inheritance)
    1多继承语法:23//助教类既继承于老师类,又继承于学生类4classAssistant:publicTeacher,publicStudent5{6};78当遇到的问题无法只用一个“是一个”关系来描述的时候,就是多继承出场的时候。例即是学生,又是人,还是助教。910#include<iostre......
  • C++快速入门 第三十讲:错误处理和调试
    程序出错可以分为两大类:编译时出错(complie-timeerror)和运行时错误(run-timeerror)suggest1:培养并保持一种编程风格suggest2:认真对待编译器给出的错误/警告信息suggest3:写代码三思而后行(先画流程图)suggest4:注意检查最基本的语法suggest5:把可能有问题的代码行注释suggest......
  • C++快速入门 第二十九讲:虚继承
    通过虚继承某个基类,就是在告诉编译器:从当前这个类再派生出来的子类只能拥有那个基类的一个实例。虚继承的语法:1classTeacher:virtualpublicPerson23{45}这样做的话便可以让Student和Teacher类都虚继承自Person类,编译器将确保从Student和Teacher类再派生出来的子......
  • C++快速入门 第三十一讲:错误处理与调试2
    让函数返回错误代码实例:范围限制1#include<iostream>2#include<climits>34usingnamespacestd;5classFactorial6{7public:8Factorial(unsignedshortnum);9unsignedlonggetFactorial();10boolinRange();1112private......
  • C++快速入门 第三十二讲:assert函数和捕获异常
    C语言和C++都有一个专门为调试而准备的工具函数---assert函数。这个函数是在assert.h库文件里定义的。实例1:assert函数应用1#include<cassert>2//assert()函数需要有一个参数,它将测试这个输入参数的真或者假状态3//如果为真Donothing4//如果为假Dosomething......