小甲鱼-C++快速入门笔记(46)之内联函数

写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除

www.fishc.com

https://blog.csdn.net/qq_30708445/article/details/89004016

内联(inline)

引入内联函数的目的是为了解决程序中函数调用的效率问题.内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质.编译时,类似宏替换,使用函数体替换调用处的函数名.一般在代码中用inline修饰,但能否形成内联函数,需要看编译器对该函数定义的具体处理.

inline int add(int x, int y, int z)
{
    return x+y+z;
}

在程序中,调用其函数时,该函数在编译时被替代,而不像函数那样是在运行时被调用.

而在创建类模板时,避免类声明和类定义相分离的一个好办法是使用内联方法.在类里,内联函数的基本含义是在声明该方法的同时还对它进行定义.

class Person
{
    Person(std::string name)
    {
        this -> name = name;
    }
    //......
}

除了可以更好地帮助编译器处理类模板之外,使用内联方法还有一个很好的作用:可以让你少打些字并让源代码可读性变得更好(换句话说就是,尽可能少写template <class T>).

#include <iostream>
#include <string>
 
template <class T>
class Stack
{
public:
	Stack(unsigned int size = 100)
	{
		this -> size = size;
		data = new T[size];
		sp = 0;
	}
	~Stack()
	{
		delete []data;
	}
	void push(T value)
	{
		data[sp++] = value;
	}
	T pop()
	{
		return data[--sp];
	}
 
private:
	unsigned int size;
	unsigned int sp;
	T *data;
};
 
int main()
{
	Stack<int> intStack(100);
 
	intStack.push(1);
	intStack.push(2);
	intStack.push(3);
 
	std::cout << intStack.pop() << "\n";
	std::cout << intStack.pop() << "\n";
	std::cout << intStack.pop() << "\n";
 
	return 0;
}

注意:

(1)如果你打算在自己的程序里使用Stack模板,一定要给它增加一个副本构造器和一个赋值操作符重载;

(2)上述代码还缺少必要的错误处理功能,例如在栈已满的时候调用push()方法,或者在栈为空的时候调用pop()方法,会导致程序运行出错.

(3)c++并没有限制只能使用一个类型占位符,如果类模板需要一种以上的类型,根据具体情况多使用几个占位符即可.

template <class T, class U>
class MyClass
{
    //...
}
 
//实例化
MyClass<int, float>myClass;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值