声明“即使没有实例化一个类就是一个对象”是什么意思?

时间:2011-12-06 17:21:20

标签: c++ ruby class

我是一名学习Ruby的C ++程序员。在一本初学者书中,我读到:

“类本身就是一个对象,即使你没有直接实例化它。”

我不知道如何解释。

5 个答案:

答案 0 :(得分:6)

在C ++中,除了typeid等之外,没有类的语言可见运行时表示。你可以说class Foo {};,但是你不能说&Foo。 (您可以获取typeid对象的typeinfo /地址,这是一个类对象的混合版本。)

在Ruby中,类是对象。你可以用一个对象做任何事情,你可以用一个类做,因为它是一个对象。例如,在Ruby中,您可以foo.send(...)到任何对象foo。由于一个类是一个对象,你可以像Foo.send(...)一样。

关于“你没有实例化”的部分是指通常你在Ruby中说foo = Foo.new这个事实,但是你不需要对类进行说明。类对象由运行时创建。 (事实上​​,Ruby中的class Foo; endFoo = Class.new非常相似。)

答案 1 :(得分:3)

在Ruby中,一切都是对象。这包括课程。所以当你宣布

class Thing
end

您已经创建了名为Class的{​​{1}}类的实例。它与

完全相同
Thing

将“直接实例化”Thing = Class.new 的实例。

答案 2 :(得分:1)

Ruby中的所有东西都是一个对象,甚至是类本身。

class Test
  def self.foo
    "bar"
  end
  def yin
    "yang"
  end
end

# This creates a new instance and calls #yin
Test.new.yin # => "yang"

# This calls the #foo method on the Test class object.
Test.foo     # => "bar"

答案 3 :(得分:1)

在其他一些语言中,你有一种叫做“抽象类”的东西。这些东西本身不是对象,也不能真正做任何事情。它们更像是用于创建实际对象的模板。实际对象可以执行诸如运行方法,接受参数等操作。抽象类不能执行任何操作,主要用于创建实际对象。当从它们创建对象时,它被称为“实例化”对象。

现在在ruby中,你没有抽象类。用于从(实例化)派生对象的类在某些方面有点像抽象类。但是与抽象类不同,ruby中的这个类本身已经可以做了。

这就是你引用的语句“一个类本身就是一个对象,即使你没有直接实例化它”也试图弄清楚。它在抽象类的意义上不是虚拟的。相反,它已经是一个完整的对象。

答案 4 :(得分:0)

这一切真正意味着您可以像处理这些类的实例一样对待类。

class Animal; end
bird = Animal.new

您现在可以Animal使用bird

e.g。

Animal.methods => 'list of methods'
bird.methods => 'list of methods'

这就是真的。