标签: subobject

什么是动态类型的对象

我认为动态类型意味着动态分配对象使用new.在下面的例子中,您是否p指出动态类型或静态类型的对象?在标准中,它没有说动态类型是动态对象.

1.3.3 - 由左值表达式表示的左值所指的最派生对象(1.8)的类型.[示例:如果指针(8.3.1)p的静态类型是"指向B类的指针"指向D类的对象,从B派生(第10节),则表达式*p的动态类型为"D" ".参考文献(8.3.2)的处理方式相似.]

以下引用的含义是什么呢?

rvalue表达式的动态类型是其静态类型

class Base {
    virtual void foo(){}
};

class Derived : public Base {
    void foo(){}
};

int main()
{
    Derived d;
    Base *p = &d;
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance pointers lvalue subobject

10
推荐指数
3
解决办法
5258
查看次数

java设计:子对象的重复方法

当我在处理我的一个项目并且不得不使用大量嵌套对象时,当我想从上层对象设置一个深层嵌套对象的实例变量时,我变得非常不确定我在Java中的结构设计.感觉我错过了对Java中结构化设计的基本理解.对此有任何见解表示赞赏.

想象一下,我有一个具有嵌套子对象作为变量的逻辑结构的对象.例如:

Country
  Capital
     Palace
        King
Run Code Online (Sandbox Code Playgroud)

如果我现在想要在主对象(Country)中设置King中的私有String变量'nameOfKing',我将不得不在King的所有上层类中定义每个方法.所以像这样:

public class Country {
   private Capital capital;

   public void setNameOfKing(String n) {
      capital.setNameOfKing(n);
   }
}

public class Capital{
   private Palace palace;

   public void setNameOfKing(String n) {
      palace.setNameOfKing(n);
   }
}

public class Palace{
   private King king;

   public void setNameOfKing(String n) {
      king.setNameOfKing(n);
   }
}

public class King{
   private String nameOfKing;

   public void setNameOfKing(String n) {
      this.nameOfKing = n;
   }
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以打电话了country.setNameOfKing(n);.现在这很好,如果你只有几个变量,但是如果类King,Palace,Capital各自有许多其他变量和方法定义并且所有这些必须从Country调用.如果Palace还包含其他类对象(现在只是制作东西)怎么办?ThroneRoom,Treasury,Queen等...这意味着对于子类中的几乎所有方法,都必须存在于Country类中,可能意味着你必须创建大量的方法,只是为了将信息传递给子对象,从而产生一个非常大的Country类.

现在我想你可以在技术上说国王也可以在国家中定义,废除宫殿和资本中的额外方法,但它仍然意味着方法必须存在于国家类中,如果这种结构有意义如在逻辑组合在一起,最好的方法是什么?我不确定有更好的方法,但我不能动摇我在这里遗漏的感觉.

java methods subobject

5
推荐指数
1
解决办法
289
查看次数

处理基类子对象的表达式的动态类型

我再次问这个问题,因为唯一的另一个类似问题已经接近10年了,并且包含有关涉及基类子对象的表达式的错误信息:

[defns.dynamic.type]glvalue的动态类型定义为:

glvalue所引用的最派生对象的类型

glvalue最多只能引用一个对象,并且由于[intro.object] p6定义的“最派生对象” 实质上是:

完整的对象,数据成员或类类型的数组元素,或非类类型的对象称为最派生对象。

如果glvalue不引用最派生的对象,那么动态类型是否不确定?

另外,我知道表达式的动态类型的预期效果是:对于E引用类型为object的glvalue表达式,该对象是type的对象的B基类子对象D,其中B是的基类D,以获取类型DE,但是,我看不到当前措辞如何实现甚至不需要实现,因为绑定到派生类类型的基类类型的引用/指针将始终引用基类子对象。据我所知,永远不会发生表达式的类型和它所引用的对象的类型的情况。

c++ pointers lvalue language-lawyer subobject

0
推荐指数
1
解决办法
104
查看次数