Define tus propios objetos en la clase.

En la definición de clase de C ++, no es posible definir objetos de su propia clase en la clase, pero puede definir objetos punteros y referencias de su propia clase.

class A
{
    
    
public:
 A ()
 {
    
    
  cout<<"Constructor method."<<endl;
 };
 A a;
};
 
void main()
{
    
    
 A aa;
}

La compilación del código anterior genera un error

'a': usa 'A', que se está definiendo。

Si puede acambiar el logro *a.

Y java puede definir objetos de su propia clase en la clase.

class A{
    
    
  public A aa;
 }

Dicho código se puede compilar sin problemas, pero si se crea una instancia de objeto cuando se define, tampoco se podrá compilar.

class A{
    
    
  public A aa = new A();
 }

Error de aviso:

Excepción en el hilo "main" java.lang.StackOverflowError en
test1 $ abc. (Test1.java:4)

Obviamente, la pila se desbordó.
¿por qué? De hecho, la esencia de los problemas anteriores es la misma, es decir, el momento en que se crean instancias de objetos.
En C ++, se crea una instancia del objeto cuando se define el objeto, es decir, se asigna el espacio de memoria del objeto. Por lo tanto, si define el objeto de su propia clase cuando lo define, conducirá al fenómeno de crear objetos recursivamente, crear un objeto aa, porque aa es una instancia de la clase A, entonces hay un objeto aa en aa, y hay que crear uno El objeto aa, asignarle memoria ..., esto provocará que el objeto se cree de forma recursiva, y el resultado es que la memoria se agota.
En Java, solo llamando al nuevo método se puede crear una instancia de un objeto, y se asigna espacio para el objeto en la memoria. Los objetos solo pueden crear instancias de objetos cuando son nuevos, por lo que los objetos de sus propias clases se pueden definir en una clase. Si el ejemplo anterior se modifica para hacer una instancia de una clase, no habrá problemas.

class A{
    
    
  public B bb = new B();
}

Dicho código se puede compilar y ejecutar.
Pero si usa new para crear su propio objeto en una clase java, es posible declararlo como estático. Esto se debe a que el miembro estático se inicializa solo una vez cuando se crea el objeto de la clase o se llama al miembro estático (método) de la clase, y luego no se crea ni se inicializa de nuevo.

Supongo que te gusta

Origin blog.csdn.net/Fei20140908/article/details/108510334
Recomendado
Clasificación