C++面向对象学习笔记(一)

C++面向对象学习笔记(一)

废话

最近在学C++后台开发这方面,在看侯捷老师的视频课,记录一些学到的新东西。因为笔者有一些C++的基础,因此一些基础的知识是不会在这里出现的。侯捷老师的课有讲不少关于C++的进阶内容,仍是很不错的,就是讲话有点慢,得开倍速。有兴趣的兄弟们能够去看一看。c++

正文

一、内联函数函数

类的成员函数中,有一些能够成为内联函数。一样的函数体,成为内联函数会比普通函数运行效率更高。只有编译器能决定函数是否成为内联函数,而做为写代码的,有两种方式建议编译器把指定函数内联,然而编译器未必照办。第一种方法是在类内实现成员函数,也就是函数体写在类的大括号里面。第二种方法是在函数定义时加一个inline。对于非类成员函数,也能够经过第二种方法变成内联函数。工具

内联函数说白了就是编译的时候编译器会把函数的代码复制到每个调用函数的地方,这样至关于省了那一次函数调用,会稍微快一点。因此若是你想要内联的函数比较复杂,编译器大几率会拒绝。通常会把一些小的工具函数声明为内联函数。学习

二、构造函数初始化表达式指针

在类的构造函数时,若是想要初始化一些类的成员变量,有一种比在函数里赋值更方便的方式。code

class someClass
{
public:
    // 构造函数
	someClass(int i) : someVariable(i) {}
private:
	int someVariable;
}

这样不只是看起来比较明显,并且在执行时会减小一步赋值。正常写法的话,执行时会先给someVariable赋初始值(这里没有,就是0),而后再把传进来的参数i赋值给它。利用初始化表达式,会直接将someVariable的初始化用i的值来进行,少了一步赋值。视频

类似的状况还有在调用一些有参数的构造函数时发生。(这里也能够认为是调用了someVariable的一个有参数的构造函数。)对象

class father
{
public:
    // 默认构造函数
    father()
    // 另外一个构造函数
    fatehr(int i) {}
}

class someClass : public father
{
public:
	someFunction(int i) : father(i) {}
}

若是这里不使用初始化表达式,在子类的构造函数执行以前,会先执行父类的默认构造函数。使用初始化表达式能够用能够传参的构造函数,若是父类有不少构造函数的话,也能够手动指定想要的那一个。开发

对于不是父类,而是类内复合的其余类(不是用指针引用的成员类),也能够用相同的方式指定复合类的构造函数。编译器

三、函数返回引用

C++中函数能够返回引用,这里指的不是返回指针。先给例子。

int &AddOne(int &i){
    ++i;
    return &i;
}
int AnotherAddOne(int i){
    ++i;
    return i;
}
//这是错的!
int &WrongAddOne(int i){
    ++i;
    return &i;
}

不管是返回引用仍是参数为引用,其本质都是传入和返回一个地址。使用地址的好处就是能够省下一个局部变量的建立。好比在上例第一个函数中,与第二个函数相比,传入和返回时各省下了一个临时变量。而在第三个函数中,i是一个函数内部的局部变量,存在栈上,当函数返回后该区域就属于未知领域了,因此在返回以后仍使用i的地址跟用野指针是一个性质。(虽然有时候这么写能够跑出对的结果,可是要避免!)

再补充一下,引用和指针的区别。一言以蔽之,引用就是一个指针常量。同一个变量的引用和指针的值都是它的地址值,是同样的。引用的特色在于它必须依赖于变量而存在,所以它永远不会是空。对于引用的全部操做会自动施加在原变量上,好比自增,sizeof等。对于指针的操做会操做指向的地址值。

又是一段废话

好像写的有点长,写不完了。明天再写吧。

相关文章
相关标签/搜索