理解非原始数据类型

时间:2015-01-28 23:29:48

标签: c++ types computer-science

了解原始数据类型的工作原理很简单:计算机中的所有内容都存储为一系列的0和1,因此我需要存储的所有内容都需要编码为0和1的系列。例如:实数3.14必须存储为位模式,负数-1234必须存储为位模式,字符'A'必须存储为位模式,当我将其中一个数据存储在内存中时,我必须使用特定数据类型标记它们存储位置的内存位置(例如float表示实数的位模式),此数据type告诉我如何在以后要求时解释这个位模式。

但是这个定义如何适用于类,我的意思是当我创建一个特定类的对象时,例如:

MyClass mc;

mc不存储需要以特定方式解释的位模式,如何理解将类视为数据类型?或者是否有另一种数据类型的定义?

2 个答案:

答案 0 :(得分:0)

类或结构是其他数据类型的组合 - 复合数据类型 - 其中组成数据类型可以是基本数据类型或复合数据类型。

在以下示例方案中,XY是两种复合数据类型。 Y仅根据原始数据类型定义。 X是根据原始数据类型和Y定义的。

struct Y
{
    double* d;
    char e;
}

struct X
{
    float a;
    int b;
    Y c;
}

编译器决定如何定义XY的位模式。例如,Y可能如下所示:

<8 bytes for double* d><1 byte for char e>

X可能如下所示:

<4 bytes for float a><4 bytes for int b><9 bytes for Y c>

编译器为每个类或结构选择的特定位模式对于理解该概念并不重要。重要的是编译器为每个类或结构选择一个特定的位模式,然后始终如一地使用它。

答案 1 :(得分:0)

类和其他复合数据类型通常仅与其成员一起存储。位内容取决于其数据成员的值。

所以给出以下课程:

class MyClass
{
  bool  flag;
  int   number;
  double d;
};

计算机将存储flag成员的1和0,然后是一些填充(跳过字节),然后是number字段的1和0,然后是更多填充,然后然后是d字段的1和0。