cpp空指针访问成员函数

03-3 空指针访问成员函数

在 c++中,允许空指针调用成员函数的,但是也需要注意有没有用到this指针。

如果用到了this指针,需要加以判断保证代码的健壮性。

#include <iostream>
using namespace std;
class Person
{
public:
    int m_age;
    void Print()
    {
        cout << "这是类Person" << endl;
    }
    void PrintAge()
    {
        cout << m_age << endl;
    }
};
void main()
{
    class Person* p;
    p = NULL;
    p->Print();
    //p->PrintAge();
}

在这里面我们创建了一个类,名称是Person,这里面有两个函数,一个函数只是打印一段话,另外一个函数是打印一个成员变量的数值。

之后我们创建了一个class Person的指针p,将这个p设置到空的位置(也就是NULL)。之后使用p去调用函数,会发现如果调用的是只有打印一句话的函数,程序会正常运行。如果调用的函数中含有属性,则会报错。

如果调用的函数中含有属性,则会报错。将p->PrintAge();打开,那么会有错误。报错如下

读取位置 0x0000000000000000 时发生访问冲突。

这是因为我们在调用含有属性的函数是,其实默认加上了this。报错原因:传入的指针是NULL

比如这样一段代码:

void PrintAge()
{
    cout << m_age << endl;
}

在编译器的眼中是这样的:

void PrintAge()
{
    cout << this->m_age << endl;
}

但是我们使用的p是一个空指针,那么this没有确切的数据,那么就不可能访问到成员。

但是如果我们用到了空指针,我们需要加上一些操作来提高代码的健壮性,比如说这样:

void PrintAge()
{
    if (this == NULL)
    {
        return;
    }
    cout << m_age << endl;
}

在这里会先判断传入的指针是否为空(this指针,隐藏在每一个类中的对象中,不需要手动创建),如果传入的是空,那么会直接返回掉这个函数。

总结

  1. 空指针可以访问成员函数
  2. 在成员函数可以添加if (this == NULL) { return; }来增强代码的健壮性。
文章「cpp空指针访问成员函数」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/886」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
无评论:-)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇