集裝箱船:當一個物體類創建到另一個類中,那麽該對象將成為該類的成員,類之間的這種類型的關係稱為集裝箱船或者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++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。