我们应该知道C++有两种成员数据: static,nostatic; 三种成员函数: static,nostatic,virtual。其实对于普通的成员函数中, 参数中都有一个this指针。这个this指针其实指向的是对象自己,通过this指针。C++编译器会知道是哪个对象调用的类的成员函数。

C++类对象中的成员变量和成员函数是一起存储的吗?如果不是?

我们应该知道C++有两种成员数据: static,nostatic; 三种成员函数: static,nostatic,virtual。
下面看这个案例:

class A{    int a;    int b;};class B{    int a;    int b;    static int c;};class C{    int a;    int b;    static int c;public:    void func() {}    static void pg() {}};int main(){    //1. 分析A对象占的内存    A a;    cout << sizeof(a) << endl;  //结果是8    //2. 分析B对象占的内存    B b;    cout << sizeof(b) << endl;  //结果是8    //3. 分析C对象占的内存    C c;    cout << sizeof(c) << endl;  //结果是8    return 0;}

其实根据输出结果,我们得出以下的结论:
a. 成员变量:

  • 普通的成员变量存储在对象中,与strutc变量具有相同的内存布局和字节对齐方式;

  • 静态的成员变量存储于全局数据区中

b. 成员函数存储在代码段中。


C++编译器如何管理类和对象,具体的说就是对象调用类中的方法,C++编译器是如何区分哪个具体的对象调用哪个成员方法的?

这里写图片描述
其实对于普通的成员函数(不是静态的成员函数)中, 参数中都有一个this指针。这个this指针其实指向的是对象自己,通过this指针。C++编译器会知道是哪个对象调用的类的成员函数。


我们总结一下:
a. C++类对象中的成员变量和成员函数时分开存储的;
b. C++类的普通成员函数(包括构造函数,但是不包括静态的成员函数)中都包含一个指向当前对象的this指针;
c. 静态成员函数和静态成员变量属于类;
d. 静态成员函数和普通成员函数的区别:
静态成员函数不包含指向具体对象的this指针,普通的成员函数包含一个指向具体对象的指针。

文章概述

我们需要解决这几个问题:
a. C++类对象中的成员变量和成员函数是一起存储的吗?如果不是?
b. C++编译器如何管理类和对象,具体的说就是对象调用类中的方法,C++编译器是如何区分哪个具体的对象调用哪个成员方法的?


C++类对象中的成员变量和成员函数是一起存储的吗?如果不是?

我们应该知道C++有两种成员数据: static,nostatic; 三种成员函数: static,nostatic,virtual。
下面看这个案例:

class A{    int a;    int b;};class B{    int a;    int b;    static int c;};class C{    int a;    int b;    static int c;public:    void func() {}    static void pg() {}};int main(){    //1. 分析A对象占的内存    A a;    cout << sizeof(a) << endl;  //结果是8    //2. 分析B对象占的内存    B b;    cout << sizeof(b) << endl;  //结果是8    //3. 分析C对象占的内存    C c;    cout << sizeof(c) << endl;  //结果是8    return 0;}

其实根据输出结果,我们得出以下的结论:
a. 成员变量:

  • 普通的成员变量存储在对象中,与strutc变量具有相同的内存布局和字节对齐方式;

  • 静态的成员变量存储于全局数据区中

b. 成员函数存储在代码段中。


C++编译器如何管理类和对象,具体的说就是对象调用类中的方法,C++编译器是如何区分哪个具体的对象调用哪个成员方法的?

这里写图片描述
其实对于普通的成员函数(不是静态的成员函数)中, 参数中都有一个this指针。这个this指针其实指向的是对象自己,通过this指针。C++编译器会知道是哪个对象调用的类的成员函数。


我们总结一下:
a. C++类对象中的成员变量和成员函数是分开存储的;
b. C++类的普通成员函数(包括构造函数,但是不包括静态的成员函数)中都包含一个指向当前对象的this指针;
c. 静态成员函数和静态成员变量属于类;
d. 静态成员函数和普通成员函数的区别:
静态成员函数不包含指向具体对象的this指针,普通的成员函数包含一个指向具体对象的指针。

相关推荐:

Php面向对象 抽象类

PHP面向对象编程详解:类和对象_PHP教程

更多相关文章

  1. 一招搞定C++调用Lua代码配置文件函数(附代码)
  2. c/c++字符串函数是什么类型和它是如何转换的?举例说明
  3. C++11新特性- 纯虚函数和final说明符的用法
  4. C++11新特性 - 多态和虚函数,override说明符
  5. 探索C++虚函数在g++中的实现(动多态)_虚函数表剖析
  6. 第一章C++:函数返回值、GNU编译器命令
  7. 第六章C++:函数基础与应用
  8. C++异常处理:系统函数terminate的调用
  9. C++学习基础知识--this指针、静态成员、常量成员函数

随机推荐

  1. Fast RCNN的配置流程
  2. 在Python中的大文件中拆分行的内存问题
  3. Python之CMDB资产管理系统
  4. 在python中,如何能同时打开多个excel而只
  5. 怎样写贪吃蛇小游戏?用100行python代码轻
  6. python 的基础学习 第九天 文件的操作
  7. 是否可以在没有安装铁python的PC上运行编
  8. Django管理员提出CSRF验证失败
  9. Python2.6及后期版本的新特性——接口和
  10. TensorFlow数据集(一)——数据集的基本使用