C++关于类的成员函数的调用问题

#include <iostream>

using namespace std;

class A{
public:
    A(){};
    ~A(){}
    
    void Print(){
        cout<<"A"<<endl;
    }
    virtual void Print2(){
        cout<<"A2"<<endl;
    }
    void display(){
        cout<<a<<endl;
    }

private:
    int a=2;

};



int main()
{
    A* a;
    a->Print();
    a->Print2();
    a->display();
}
为什么a->Print();能调用成功而后面两行调用都会出现段错误呢
#学习路径#
全部评论
虚函数的调用是看实际对象的,你没有new一个对象出来,会报错的
点赞 回复 分享
发布于 2021-06-03 15:11
mark
点赞 回复 分享
发布于 2021-06-30 23:28
print2需要a确定函数地址,display需要a确定成员变量地址。a是一个未初始化指针,指向不明确地址,所以段错误。print静态绑定且没有访问成员变量,所以没问题。 看汇编会更明确一点,print2和display都会有类似 mov ecx, dword ptr [a] 的操作。如果你运气够好,a刚好指向了一个“合法”的对象,程序甚至可以正常运行。 所以编译器都会警告未初始化问题(VS2019直接报编译错误,我直呼好家伙
点赞 回复 分享
发布于 2021-07-02 02:21
因为第一个并未用到对象的内容
点赞 回复 分享
发布于 2021-07-02 13:33

相关推荐

2024-12-09 11:16
已编辑
蚌埠坦克学院 机电工程师
津輕:译文: 本科入职过华为,然后又去读研了;研究生毕业继续面华为,感觉走了弯路;自己2硕可能不一定能过,但还是愿意分享面经。(4分) 主题思想: 作者借用三年前后面试华为的经历,对比表现了自己求职境遇的不同,表达了选择读研的犹豫和读研就业后的希望(2分);同时以小见大,表述了时代变迁中就业形势的恶化,暗含了自己对当今就业形势的担忧(2分);在文章的最后,作者希望自己能够发布面经以帮助更多求职者,突出展示了作者的博大胸襟与作者心中对求职者们的鼓励与期望。(2分) (其他答案言之有理可酌情给分)
点赞 评论 收藏
分享
新记话事人:你就和她说去抖音了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务