C++学习之路--(1.回顾类)

一.内联函数

1.在类声明内定义内联函数

2.内联函数

 在C++中,用户可以创建实际上不调用的短函数,他们的代码在每次调用的程序行里得到扩展。这个过程类似于使用类似函数的宏。为使一个函数在程序行进行代码扩展而不被调用,只要在函数前面加上关键字inline即可。

 例如,在下面的程序,函数max()在行内扩展而不被调用:

#include <iostream>
using namespace std;
inline int max(int a, int b)
{
    return a>b?a:b;
}
int main()
{
    cout<<max(10,20);
    cout<<" "<<max(99,88);
}

上面的程序等价于下面的程序:

#include <iostream>
using namespace std;
int main()
{
    cout<<(10>20?10:20);
    cout<<" "<<(99>88>99:88);
}

内联函数是C++的一个重要补充的原因是,他们能使程序员写出非常有效的代码。因为类一般要求几个经常被执行的接口函数,因此,这些函数的效率在C++中是非常重要的。我们知道,每次调用函数时,变元要进栈,各种寄存器内容要保存;函数返回时,又要恢复他们的内容。问题是这些指令要占用时间。但是,如果函数在行内扩展,上述那些操作就不存在了。当然,虽然函数行内扩展能产生较快的速度,但由于重复编码会产生较长的代码,因此最好只内联那些能明显影响程序性能的函数。

inline对编译器是一种请求,而不是命令。编译器可以选择忽略它。还有,一些编译器不能内联所有类型的函数。例如,通常编译器不能内联递归函数。必须查阅自己的编译器用户手册以了解对内联的限制。如果一个函数不能被内联,它就被当作一个正常的函数调用。

 inline关键字不是C++的 C子集 的一部分,因此,C89没有定义它,然而,C99中增加了它。

 内联函数可以是类的成员。

class myclass{
    int a,b;
public:
    void init(int i,int j);
    void shou();
};
inline void myclass::init(int i,int j)
{
    a = i;
    b = j;
}
inline void myclass::show()
{
    cout<<a<<" "<<b<<"\n";
}

在类声明内定义内联函数

 在类声明内(大括号之内)定义内联函数是可能的。如果一个函数是在类声明内定义的,它将自动的转换成内联函数(如果可能的话)。没有必要(但不是错误)在函数声明的前面再加上关键字inline。

class myclass{
    int a,b;
public:
    //automatic inline
    void init(int i, int j){a=i;b=j;}
    void show(){cout<<a<<" "<<b<<"\n";}
}

构造函数和析构函数也可以是内联的。

转自:http://zhidao.baidu.com/link?url=C_svpMOzAT0WuFt8ZuXfio6zR6tfU958uG-7R7TLvgv4bIEKEMWgG0lDv05sb2uVxIjmHY3Zy1DA1hm3FGBeGHXphl6zjVvPBdClwtYx39W

时间: 2024-10-24 15:42:42

C++学习之路--(1.回顾类)的相关文章

【C++学习之路】派生类的构造函数(二)

二.有内嵌对象的派生类 1.一般来说,我们会这样定义构造函数 student( int i, string nam, int pid, string pnam, int sid) : person( i, nam),parent(pid,pnam){ stuid = sid; } person是基类的构造函数,parent是该派生类内嵌的person子对象   2.具体例子 1 #include <iostream> 2 using namespace std; 3 class A 4 { 5

【C++学习之路】派生类的构造函数(一)

一.简单派生类的构造函数: 1.所谓简单派生类,就是指派生类中不包含基类的内嵌对象的派生类. 2.一般来说,这样的派生类的构造函数的形式是: student( int i, string nam, int sid) : person( i, nam) { stuid = sid; } person(是基类的初始化列表) 3.构造函数的初始化列表的使用 3.1所有的构造函数都可以拿参数的初始化表来构造完全属于自己的数据成员,比如: 1 #include <iostream> 2 using na

jquery学习之路之元素类的切换toggle

对元素类的控制(增删改切换)达到不同的页面效果<head><script src="/jquery/jquery-1.11.1.min.js"></script><script>$(document).ready(function(){ $("#blue").click(function(){ $("h1,h2,p").toggleClass("blue"); }); $(&qu

【C++学习之路】派生类的构造函数(三)

三.多层继承的派生类 1.多层继承的派生类只需在构造函数的初始化列表中写出直接基类的构造函数即可 1 class student 2 { 3 public: 4 student(int n, string nam) 5 { 6 num = n; name = nam; 7 } 8 }; 9 class student1 : public student 10 { 11 public: 12 student1(int n, string nam, int a) :student(n, nam) {

C++学习之路: class类外的成员函数定义 和 友元 的讨论

引言:成员函数定义在类内和类外的区别在于是否内联展开. 定义在类内一般都是内联展开的, 节省了调用函数的开销.如果函数体过于庞大,编译器会忽视内联建议 如果定义在类外,需要在类内声明,则程序运行时 是采用调用的方式 访问该函数,是非内联的方式. 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5 6 class Student 7 { 8 publi

Python3学习之路~7.2 类的特殊成员方法

1. __doc__ 表示类的描述信息 class Dog(object): """ 这个类是描述狗这个对象的 """ def func(self): pass print(Dog.__doc__) # 输出: 这个类是描述狗这个对象的 2. __module__ 和  __class__  __module__ 表示当前操作的对象在哪个模块 __class__     表示当前操作的对象的类是什么 class C: def __init__(s

类与对象的学习之路

---恢复内容开始--- 学习java也有一段时间了,这周踏上了类与对象的学习之路,回过头来总结一下类与对象的基本知识.之前在大一上就接触了Python语言跟C语言,现在开始学习java语言了.我觉得跟之前学的C语言还是有区别的,至于在java书中提及的C++没学习,听别人说C++跟java有点像,这两种编程语言都是面向对象的,并且编程语言本身之间都有很多相似相同的地方. 一.说说类与对象 说到面向对象,那么不得不提的就是类和对象了.Java代码是以类为单位的.在我看来,类就是一个模板,比如一个

初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)

初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像在给Qt做宣传,在主页上占了一栏的广告,只是,这时,我还没怎么刻意去留意这个陌生的字眼.在我大二上学期中下期时,即大概是2011年的12月,由于自己刚刚完成了汇编语言的入门学习,正要制订下一个学习目标,所以,又开始找起了资料,同时,也再次开始为自己的就业问题担心,于是,开始搜集一些招聘单位的信息,这时候,

Android 零基础学习之路

第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正则表达式. 3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收:构造函数.this关键字.方法和方法的参数传递过程.static关键字.内部类,Java的垃极回收机制,Javadoc介绍. 4.对象实例化过程.方法的覆盖.final关键字.抽象类.接口.继承的优点和缺点剖析:对象的多态性:子类和父类之间的转换.抽象类和接口在多态中的应用.多态带来的好处.

后端开发者的Vue学习之路(二)

目录 上篇内容回顾: 数据绑定 表单输入框绑定 单行文本输入框 多行文本输入框 复选框checkbox 单选框radio 选择框select 数据绑定的修饰符 .lazy .number .trim 样式绑定 class绑定 对象语法: 数组语法: style绑定 对象语法: 数组语法: 补充: 事件 绑定事件 事件修饰符 按键修饰符 事件绑定的简写 补充: Vue指令 数组操作 官网的话 补充: Vue的元素复用问题 数据残留问题 问题的解决: 首发日期:2019-01-20 上篇内容回顾: