Portacontenedores : cuando un objeto de una clase se crea en otra clase, ese objeto será miembro de esa clase, este tipo de relación entre las clases se conoce como portacontenedores o relación has_a , ya que una clase contiene el objeto de otra clase.
La clase que contiene el objeto y los miembros de otra clase en este tipo de relación se denomina clase contenedora y el objeto que forma parte de otro objeto se denomina objeto contenido, mientras que el objeto que contiene otro objeto como parte o atributo se denomina clase contenedora. objeto contenedor .
Sintaxis para portacontenedores :
C++
// Class that is to be contained class first { // Class Definition }; // Container class class second { // Creating object of first first f; . . };
Programa 1:
A continuación se muestra el programa para explicar el concepto de portacontenedores en C++ :
C++
// C++ program to illustrate the // concept of containership #include <iostream> using namespace std; class first { public: void showf() { cout << "Hello from first class\n"; } }; // Container class class second { // Create object of the first-class first f; public: // Define Constructor second() { // Call function of first-class f.showf(); } }; // Driver Code int main() { // Create object of second class second s; }
Hello from first class
Explicación: En la segunda clase anterior, hay un objeto de clase primero . Este tipo de herencia se conoce como relación has_a ya que la clase second tiene un objeto de class first como miembro. Desde el objeto f , se llama primero a la función de clase .
Herencia : Es la capacidad de una clase para derivar propiedades y características de otra clase que se conoce como Clase Base . Es una de las características más importantes de la Programación Orientada a Objetos . La clase que hereda propiedades de otra clase se llama Subclase o Clase Derivada . La clase cuyas propiedades se heredan por subclase se denomina Clase base o Superclase .
Sintaxis:
C++
class subclass_name : access_mode base_class_name { // body of subclass };
Explicación: subclass_name es el nombre de la subclase, access_mode es el modo en el que uno quiere heredar esta subclase. Por ejemplo, public , private , etc. Base_class_name es el nombre de la clase base de la que se quiere heredar la subclase.
Nota: una clase derivada no hereda el acceso a miembros de datos privados. Sin embargo, hereda un objeto principal completo, que contiene los miembros privados que declara esa clase.
Programa 2:
A continuación se muestra el programa para explicar la herencia en C++:
C++
// C++ program to demonstrate the // concept of inheritance #include <bits/stdc++.h> using namespace std; // Base class class Parent { public: int id_p; }; // Sub class inheriting from the // Base Class(Parent) class Child : public Parent { public: int id_c; }; // Driver Code int main() { Child obj1; // An object of class child has // all data members and member // functions of class parent obj1.id_c = 7; obj1.id_p = 91; cout << "Child ID is " << obj1.id_c << endl; cout << "Parent ID is " << obj1.id_p << endl; return 0; }
Child ID is 7 Parent ID is 91
Explicación: En el programa anterior, la clase secundaria se hereda públicamente de la clase principal, por lo que la clase secundaria también heredará los miembros de datos públicos de la clase principal.
Diferencia entre herencia y portacontenedores :
Herencia | Barco mercante |
---|---|
Permite que una clase herede datos y funciones de una clase base | Permite que una clase contenga objetos de diferentes clases como su miembro de datos. |
La clase derivada puede anular la funcionalidad de la clase base. | La clase contenedora no puede anular la funcionalidad de la clase contenida. |
La clase derivada puede agregar datos o funciones a la clase base. | La clase contenedora no puede agregar nada a la clase contenida. |
La herencia representa una relación «es-un» . | El portacontenedores representa una relación de «tiene un» . |