集装箱船:当一个物体类创建到另一个类中,那么该对象将成为该类的成员,类之间的这种类型的关系称为集装箱船或者has_a关系作为一个类包含对象另一个类的。
在这种关系中包含另一个类的对象和成员的类称为容器类,作为另一个对象一部分的对象称为包含对象,而包含另一个对象作为其部分或属性的对象称为容器类。容器对象。
集装箱船语法:
C++
// Class that is to be contained
class first {
// Class Definition
};
// Container class
class second {
// Creating object of first
first f;
.
.
};
程序1:
下面是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
解释:在上面的第二个类中,首先有一个类的对象。这种类型的继承称为 has_a 关系,因为第二类有一个第一类的对象作为其成员。从对象f中,首先调用类的函数。
继承:它是一个类从另一个类派生属性和特征的能力,称为基类。这是最重要的特征之一面向对象编程。从另一个类继承属性的类称为子类或者派生类。其属性被继承的类sub-class叫做基类或者超级级.
用法:
C++
class subclass_name : access_mode base_class_name {
// body of subclass
};
说明:subclass_name是子类的名称,access_mode是要继承该子类的模式。例如,public、private 等。base_class_name 是要从中继承子类的基类的名称。
注意:派生类不继承使用权到私有数据成员。但是,它确实继承了一个完整的父对象,其中包含该类声明的任何私有成员。
程序2:
下面是解释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
说明:在上面的程序中,子类是从父类公开继承的,因此父类的公共数据成员也会被子类继承。
继承与集装箱船的区别:
继承 | 集装箱船 |
---|---|
它使类能够从基类继承数据和函数 | 它使一个类能够包含不同类的对象作为其数据成员。 |
派生类可以覆盖基类的函数。 | 容器类不能覆盖被包含类的函数。 |
派生类可以向基类添加数据或函数。 | 容器类不能向包含的类添加任何内容。 |
继承代表着一个“is-a”关系。 | 集装箱船代表了“has-a”关系。 |
相关用法
- C++ Constructor和Destructor的区别用法及代码示例
- C++ Copysign()用法及代码示例
- C++ CHAR_MIN用法及代码示例
- C++ CHAR_MAX用法及代码示例
- C++ CHAR_BIT用法及代码示例
- C++ cos()用法及代码示例
- C++ sin()用法及代码示例
- C++ asin()用法及代码示例
- C++ atan()用法及代码示例
- C++ atan2()用法及代码示例
- C++ acos()用法及代码示例
- C++ tan()用法及代码示例
- C++ sinh()用法及代码示例
- C++ ceil()用法及代码示例
- C++ tanh()用法及代码示例
- C++ fmod()用法及代码示例
- C++ acosh()用法及代码示例
- C++ asinh()用法及代码示例
- C++ floor()用法及代码示例
- C++ atanh()用法及代码示例
- C++ log()用法及代码示例
- C++ trunc()用法及代码示例
- C++ round()用法及代码示例
- C++ lround()用法及代码示例
- C++ llround()用法及代码示例
注:本文由纯净天空筛选整理自aman362大神的英文原创作品 Difference between Containership and Inheritance in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。