什么是C+中的对象+;? 在我开始学习C++的过程中,我认为一个对象是一个OOP相关术语。然而,我学的越多,读的越多,我发现情况并非如此,我发现“对象”一词有更广义的含义。我在网上读了很多资料,但我还没有找到清晰/可靠的东西。可能是我到不了正确的地方。我可以得到标准,它有很好的段落,但正如你可能知道的,标准语言有点难。而且信息通常过于分散 我的问题:请您用简单的英语来告诉我,在OOP世界之外,C++中的对象是什么? < /P> > P> >代码> C++ 11 标准很清楚:

什么是C+中的对象+;? 在我开始学习C++的过程中,我认为一个对象是一个OOP相关术语。然而,我学的越多,读的越多,我发现情况并非如此,我发现“对象”一词有更广义的含义。我在网上读了很多资料,但我还没有找到清晰/可靠的东西。可能是我到不了正确的地方。我可以得到标准,它有很好的段落,但正如你可能知道的,标准语言有点难。而且信息通常过于分散 我的问题:请您用简单的英语来告诉我,在OOP世界之外,C++中的对象是什么? < /P> > P> >代码> C++ 11 标准很清楚:,c++,object,C++,Object,1.8C++对象模型[intro.object] 对象是一个存储区域。[注:函数不是对象,不管它是否像对象那样占用存储空间。-结束注] 就这样。对象是可以存储数据的内存块 如果你想一想,当你意识到在过去程序是围绕操作对象(或数据)的功能组织的时候,定向就更有意义了 “对象”一词早在面向对象之前就出现了 面向对象所做的是将程序组织从围绕函数组织转变为围绕数据本身组织,即对象 因此,术语以对象为导向 范式的改变 在这里,我们看到了旧时代的范式转变: struct my_object { in

1.8C++对象模型[intro.object]


对象是一个存储区域。[注:函数不是对象,不管它是否像对象那样占用存储空间。-结束注]

就这样。对象是可以存储数据的内存块

如果你想一想,当你意识到在过去程序是围绕操作对象(或数据)的功能组织的时候,定向就更有意义了

“对象”一词早在面向对象之前就出现了

面向对象所做的是将程序组织从围绕函数组织转变为围绕数据本身组织,即对象

因此,术语以对象为导向

范式的改变

在这里,我们看到了旧时代的范式转变:

struct my_object
{
    int i;
    char s[20];
};

void function(my_object* o)
{
    // function operates on the object (procedural / procedure oriented)
}
对于我们现在拥有的:

struct my_object
{
    void function()
    {
        // object operates on itself (Object Oriented)
    }

    int i;
    char s[20];
};
简短回答 从


对象是一个存储区域


稍长的回答 在传统的OOP和OOD中,对象有时用于描述对象类,有时用于描述类的实例

< C++ >代码>类< /COD>和<代码> Stutt表示类。

C++中的对象可以是<代码>类< /COD>或Stult,但它也可以是基本类型的实例。

几个简单的例子:

int i;
i
是一个对象。它与程序可以使用的存储区域相关联

struct foo { int a; int b;};
foo f;
int* ptr = new int[200];
f
也是一个对象。它还与程序可以使用的存储区域相关联

struct foo { int a; int b;};
foo f;
int* ptr = new int[200];

ptr
是指向200个
int
类型对象的指针。这些对象还与程序可以使用的存储区域相关联。

不要抨击现有的答案,但它们缺少一个元素(这可以说是一个标准缺陷)

struct foo { int a; int b;};
foo f;
int* ptr = new int[200];

对象是一个存储区域。[注:函数不是对象,不管它是否像对象那样占用存储空间。-结束注]

对象由定义([basic.def])、新表达式([expr.new])或实现([class.temporary])在需要时创建

对象的属性在创建对象时确定


对象是一个存储区域,在该存储区域中进行了构造。事实上,大多数情况下,“对象”指的是构造的实体及其值和状态,而“存储”仅指写入它的内存(或任何东西)

区别可以是一个简单的细节:

// `s` names an object that has been constructed... somewhere.
// That storage will live exactly as long as necessary to back `s`
// as long as the object exists -- no need to worry about it.
std::string s = "hello";

// Using the object
std::cout << s << '\n';
/`s`命名已构造的对象。。。某处。
//该存储器的寿命将与备份所需的时间完全相同`
//只要对象存在,就不必担心它。
std::string s=“hello”;
//使用对象

STD::C++世界中的CUT

,一个对象是一个类的实例化。它以特定方式运行(方法/函数),并具有描述其状态的属性(数据成员)

对象具有生存期。它被创建(通过构造函数),它生存,它死亡(通过析构函数)


类就像一个蓝图,通过它定义对象的行为和属性。< /P> < P>参见C++标准(N4618)的第1.8条,一个对象:

  • 在其施工期间,在其使用寿命和破坏期内,占据一个存储区域

  • 具有生存期(对于非平凡对象,它在初始化完成时启动,在析构函数启动时停止)

  • 具有存储持续时间(静态、动态、线程或自动)

  • 具有类型:唯一的对象类型(严格别名)

  • 可能有一个名称


  • 关于对象类型 (其他答案已经详细说明了存储持续时间的含义。)

    对象类型(或类)是对象的唯一属性。对象类型指定初始化对象占用的存储区域的含义。所以意义是独特的,从哲学的角度来看,对象类型是对象的种类,而不是它的种类

    对于编译器,它仅约束可应用于存储区域的操作集合:与对象类型相关联的方法(在这种情况下,类型由
    结构
    定义),以及将对象作为参数的所有函数(可见)

    对于程序员,该类型还指定在对象的生存期内对其应用一系列操作的后果。类型包含的信息比编译器实际可能知道的要多得多。例如,在检查了
    std::vector
    类型的对象
    an_obj
    的大小为
    0
    之后,程序员知道
    an_obj.at(0)
    将始终抛出,编译器可能不会抛出