C++知识梳理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hua12134/article/details/79440746

1、内联函数—inline
内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。

作用:内联扩展是用来消除函数调用时的时间开销(入栈出栈的开销)。它通常用于频繁执行的函数。一个小内存空间的函数非常受益。

在编译时将函数嵌入在每一个调用处,类似宏替换,用函数体替换函数名,但内联不一定成功。在以下情况不适合使用内联函数:
1.递归函数不能定义为内联函数
2.内联函数一般适合于不存在while和switch等复杂的结构且只有1~5条语句的小函数上,否则编译系统将该函数视为普通函数。
3.内联函数只能先定义后使用,否则编译系统也会把它认为是普通函数。
4.对内联函数不能进行异常的接口声明。

内联函数与宏函数的区别:
1>宏函数在预处理阶段进行替换,而内联函数在编译阶段
2>宏函数不能访问私有成员
3>宏定义容易产生二义性(宏只是做简单的代码替换)

2、友元函数—friend
友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。

作用:提高程序的运行效率。但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。

把A声明为B的友元:A(函数)可以访问B(类)

因为友元函数不属于类的内部,所以,友元函数中没有this指针。

3、虚函数和纯虚函数—virtual
C++多态可分为静态多态和动态动态。函数重载和运算符重载是静态多态,虚函数是动态多态。
虚函数必须是基类非静态成员函数。在某基类中声明为 virtual 并在一个(或多个)派生类中被重新定义的成员函数,实现多态性。

作用: 虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。

例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virtual(虚函数)。

class A  
{  
public:  
    virtual void func()  
    {  
        cout<<"A::func() is called"<<endl;  
    }  
};  
class B:public A  
{  
public:  
    void func()  
    {  
        cout<<"B::func() is called"<<endl;  
    }  
};  
int main(void)  
{  
    A *a = new B();  
    a->func();   // 在这里,a虽然是指向A的指针,但是被调用的函数(func)却是B的!  
    return 0;  
}

所谓“推迟联编”或者“动态联编”,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。虚函数只能借助于指针或者引用来达到多态的效果。

纯虚函数:
纯虚函数是虚函数的一种特例。它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”

virtual void funtion()=0

*纯虚函数不具备函数的功能,不能被调用
*抽象类:包含了纯虚函数的类。
*抽象类只能作为其他类的基类,不能实例抽象类的对象
*抽象类不能用作函数参数类型、返回类型和显示转换类型
*如果派生类没有定义纯虚函数的实现,而只是继承了基类的纯虚函数,那么该派生类仍是抽象类

猜你喜欢

转载自blog.csdn.net/hua12134/article/details/79440746