美文网首页
C++<第十六篇>:类成员

C++<第十六篇>:类成员

作者: NoBugException | 来源:发表于2022-01-20 20:16 被阅读0次
(1)访问类成员

类的三大特点之中包括“封装性”,封装在类中的数据可以设置成对外可见或不可见。
通过关键字 public(公有)、private(私有)、protected(保护)可以设置类中数据成员对外是否可见,也就是其他类是否可以访问该数据成员。

public:成员对外可见,对内可见;
private:成员对外不可见,对内可见;
protected:成员对外不可见,对内可见,且对派生类可见;

代码如下:

class Person
{
private:
    /*成员变量*/
    int mIndex;
    char* mName;
    short mAge;

protected:
    /*成员函数*/
    char* getName();
    void setName(char name[25]);

public:
    /*成员函数*/
    int getIndex();
    void setIndex(int index);
    short getAge();
    void setAge(short age);
};

通常情况下,成员变量设置为private,成员函数设置为public或protected。

(2)内联成员函数

在定义函数时,可以使用 inline 关键字将函数定义为内联函数。
其实,对于成员函数来说,如果其定义在类体中,即使没有使用 inline 关键字,该成员函数也被认为是内联成员函数。

可以在类中的成员函数设置为内联函数:

inline int getIndex();

也可以在类成员函数的实现部分设置为内联函数:

inline int Person::getIndex() {
    return mIndex;
}

对于内联函数来说,程序会在函数调用的地方直接插入函数代码,如果函数体语句较多,则会导致程序代码膨胀。

(3)静态类成员

静态成员可以使用类名来访问。

访问成员变量:

// 静态成员变量
static char* mName;

// 用类直接访问静态成员变量
char* name = Person::mName;

访问成员函数:

// 静态成员函数
static void setName(char name[25]);

// 用类直接访问静态成员变量
char* name = Person::getName();
(4)隐藏的 this 指针
void Person::setIndex(int index) {
    mIndex = index;
}

mIndex 是成员变量,通过调用 setIndex 方法设置index值,假设将形式参数 int index 改成 int mIndex

void Person::setIndex(int mIndex) {
    mIndex = mIndex;
}

那么作用域就紊乱了,此时不知道 mIndex 来源于成员变量,还是来源于形式参数?

这时,需要使用隐藏的 this 指针了,使用 this 指针调用成员变量:

void Person::setIndex(int mIndex) {
    this->mIndex = mIndex;
}

this指针只能调用类中的非静态成员,它的作用域是整个类,或者说它本身就是类对象的副本。

(5)嵌套类

一个类中是允许存在另一个类的,我们将类中的类称之为 嵌套类

class Person
{
private:
    int mIndex;

public:
    int getIndex();
    void setIndex(int index);

    class Node // 我是嵌套类
    {
    private:
        int mNode;
    public:
        int getNode();
    };

};
(6)局部类

函数中的类叫局部类,代码如下:

void Person::setAge(short age) {
    mAge = age;

    class Node // 我是局部类
    {
    private:
        int mNode;
    public:
        int getNode();
    };
}

[本章完...]

相关文章

网友评论

      本文标题:C++<第十六篇>:类成员

      本文链接:https://www.haomeiwen.com/subject/hizjhrtx.html