C++:内联函数与友元函数

const修饰成员函数

const修饰成员函数:在成员函数后面加const,const修饰指针所指向的对象,也就是说保证调用这个const成员函数的对象在函数内不会被改变。

class Date
{
public:
    void Display()
    {
        cout<<_year<<_month<<_day<<endl;
    }
    void Display() const
    {
        cout<<_year<<_month<<_day<<endl;
    }
private: 
    int _year;
    int _month;
    int _day;
}
int main()
{
    Date d1;
    d1.Display();

    const Date d2;
    d2.Display();
}

内联函数

以inline修饰的函数叫做内联函数,编译时C++编译器会调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序允许的效率。

  1. 内联函数是一种以空间换取时间的做法,省区函数调用开销。所以,当函数调用过多或是递归循环的情况下不适合使用内联函数。

  2. 内联函数对于编译器来说,只是一个建议,编译器会自动优化,当出现不适合使用内联函数时,编译器会自己忽略该内联。

  3. 内联函数必须将inline关键字与定义写在一起才起作用,写在声明前是不起作用的。

  4. 定义在类内的成员函数默认定义为内联的。

    class Date
    {
    public:
    void Fun()//定义在类内部默认为内联函数
    {}
    void Display();
    
    private:
    int _year;
    int _month;
    int _day;
    }
    inlne void Date::Display()//成员函数定义为内联函数
    {
           cout<<_year<<_month<<_day<<endl;
    }

在《Effiective C++》中的条款02规定:尽量以const,enum,inline替换宏

原因在于宏的不安全性:

宏的优缺点:

优点 缺点
增强代码的复用性 宏不方便调试
提高性能 代码的可读性变差,可维护性变差
没有类型安全的检查

友元

友元函数的特点:

在C++中友元函数允许在类外面访问该类中的任何成员,就像成员函数一样,友元函数用关键字friend说明。

扫描二维码关注公众号,回复: 2088392 查看本文章

但是注意,友元函数并不是类的成员函数,但是友元函数可以通过对象访问所有成员,包括私有和保护成员。

友元类:整个类可以是另一个类的友元。友元类的每个成员函数都是另一个类的友元函数,都可以访问另一个类中的保护和私有成员。

类的静态成员

在类里面用static修饰的成员,成为静态类成员。类的静态成员是该类型的所有对象所共享。

静态成员函数没有隐含的this指针,所以只能使用域访问符直接调用类的静态成员函数。

class Date
{
public:
    Date()
    {
        cout<<"Date()"<<endl;
        ++count;
    }
    void Display()
    {
        cout<<_year<<_month<<_day<<endl;
    }
    static void Print()//静态成员函数
    {
        cout<<"count:"<<count<<endl;
    }
private:
    int _year;
    int _month;
    int _day;

    static int count;//静态成员变量
};

//定义并初始化静态成员变量
int Date::count=0;

int main()
{
    Date d1;
    Date::Print();
}

猜你喜欢

转载自blog.csdn.net/mxrrr_sunshine/article/details/80871113