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

相关推荐

06-26 15:35
武汉大学 运营
点赞 评论 收藏
分享
06-11 13:34
门头沟学院 C++
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
nus2201602...:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务