类的成员函数存储方式(是否属于类的对象)

//charles测试例子
class A
{
public:
    A(){cout << "A()" << endl;}
    ~A(){cout << "~A()" << endl;}
    void func(){cout<<"void func()"<<endl;}
    void func2()
    {
        cout<<"void func2()"<<endl;
        a=1;
    }
    static void static_func(){cout<<"void static_func()"<<endl;}
    virtual void virtual_func(){cout<<"void virtual_func()"<<endl;}
    static int static_a;
    int a;
};

int A::static_a = 1;

int main()
{
    A * pa = NULL;
    pa->func();//成功
    pa->func2();//fault,函数内部使用a参数,this指针为NULL;
    pa->static_func();//成功
    pa->virtual_func();//fault, core dumped
    cout << pa->static_a <<endl;//成功
    cout << pa->a <<endl;//fault, core dumped
}

昨天去面试一家公司,面试题中有一个题,自己没弄清楚,先记录如下:

  1. class D  
  2. {  
  3. public:  
  4.     void printA()  
  5.     {  
  6.         cout<<"printA"<<endl;  
  7.     }  
  8.     virtual void printB()  
  9.     {  
  10.         cout<<"printB"<<endl;  
  11.     }  
  12. };  

main函数调用:

D *d=NULL;
d->printA();//这可以打印
d->printB();//这个出错
  回到思考题上来,对于非静态成员函数来说,它当然是对象的一部分。(只是因为存储方式上的特殊性,容易让人误解!)

回答开头问题:
类中包括成员变量和成员函数
new出来的只是成员变量,成员函数始终存在
所以如果成员函数未使用任何成员变量的话,不管是不是static的,都能正常工作

一个对象的空间=所有成员变量的大小
如果这个对象的类有虚函数的话,还可能多一个指向虚表的指针

所有函数存放在独立于对象的存储空间内
对象调用函数时,对静态成员函数直接调用不存在问题,对成员函数需要把自己以this指针传给函数以指明以哪个对象调用

所以用未初始化的指针调用静态成员函数、或者调用未使用任何成员变量的成员函数(即未用到this指针)
从理论上都是可行的,至于具体支不支持看各个编译器吧

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值