2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
किं संयोगः
(१) रचनायाः अर्थः अन्यस्य बहुविधवर्गस्य वस्तुनः वर्गस्य अन्तः सदस्यत्वेन उपयोगः भवति ।
(2) प्रकरणानाम् व्याख्यानार्थं वर्गवृक्षस्य उपयोगं कुर्वन्तु
(३) संयोजनम् अपि कोडपुनर्प्रयोगविधिः अस्ति, तस्य सारः च अस्तिसंरचनानिहितः
#include <iostream>
#include <vector>
#include <string>
// Leaf 类
class Leaf {
public:
Leaf(const std::string& color) : color_(color) {
std::cout << "Leaf constructor called: " << color_ << std::endl;
}
~Leaf() {
std::cout << "Leaf destructor called: " << color_ << std::endl;
}
void display() const {
std::cout << "Leaf color: " << color_ << std::endl;
}
private:
std::string color_;
};
// Branch 类
class Branch {
public:
Branch(int length) : length_(length) {
std::cout << "Branch constructor called: " << length_ << " cm" << std::endl;
}
~Branch() {
std::cout << "Branch destructor called: " << length_ << " cm" << std::endl;
}
void display() const {
std::cout << "Branch length: " << length_ << " cm" << std::endl;
}
private:
int length_;
};
// Tree 类,包含 Leaf 和 Branch 对象
class Tree {
public:
Tree(const std::string& leafColor, int branchLength)
: leaf_(leafColor), branch_(branchLength) {
std::cout << "Tree constructor called" << std::endl;
}
~Tree() {
std::cout << "Tree destructor called" << std::endl;
}
void display() const {
leaf_.display();
branch_.display();
}
private:
Leaf leaf_;
Branch branch_;
};
int main() {
Tree tree("Green", 150);
tree.display();
return 0;
}
वंशसंरचनालक्षणोपमा
(1)उत्तराधिकारः एकप्रकारः (अस्ति क) सम्बन्धः संक्रामकः न तु सममितः।
(२) संयोगः (अस्ति क) इति भागस्य सम्बन्धः, २.
(३) उत्तराधिकारः श्वेत-पेटी-पुनर्प्रयोगः अस्ति। यतो हि वर्गस्य उत्तराधिकारः अस्मान् स्वस्य कार्यान्वयनस्य अनुसारं मातापितृवर्गस्य कार्यान्वयनविवरणं अधिलिखितुं शक्नोति, मातापितृवर्गस्य कार्यान्वयनम् बालवर्गस्य कृते दृश्यते
(4) उत्तराधिकारस्य श्वेत-पेटी-पुनर्प्रयोग-विशेषता वर्गस्य एन्कैप्सुलेशन-विशेषतां किञ्चित्पर्यन्तं नष्टं करोति, यतः एतत् मातापितृवर्गस्य कार्यान्वयनविवरणं उपवर्गस्य समक्षं उजागरयिष्यति
(५) संयोजनं कृष्णपेटीपुनर्प्रयोगस्य अस्ति।समाहितस्य वस्तुनः आन्तरिकविवरणानि बाह्यजगति न दृश्यन्ते, अतः तस्य समापनम् तुल्यकालिकरूपेण उत्तमम् अस्ति तथा च कार्यान्वयनस्य परस्परनिर्भरता तुल्यकालिकरूपेण अल्पा भवति
(6) यथा यथा समाहितवर्गस्य निर्माणं भवति तथा तथा संयोजने समाविष्टः वर्गः निर्मितः नष्टश्च भविष्यति। संयोजनानि कृष्ण-पेटी-पुनः उपयोगः भवति तथा च अन्य-वस्तु-सन्दर्भान् अथवा समानप्रकारस्य सूचकान् प्राप्य रनटाइम्-समये गतिशीलरूपेण परिभाषितुं शक्यते । दोषः अस्ति यत् व्यवस्थायां बहुवस्तूनि सन्ति ।
(7) OO डिजाइन सिद्धान्तः प्रथमं संयोजनं करणीयम्, ततः उत्तराधिकारः भवति।
बहु उत्तराधिकारः
(१) बहुविरासतस्य अर्थः अस्ति यत् उपवर्गस्य बहुविधाः मातापितृवर्गाः सन्ति
(2)बहुविरासतप्रदर्शनम्
(३) बहुवंशस्य एकवंशस्य च सिद्धान्तयोः स्पष्टः भेदः नास्ति ।
(४) बहुविधं उत्तराधिकारं अस्पष्टतायाः समस्यां जनयितुं शक्नोति
बहुविरासतस्य अस्पष्टता १
(1) परिदृश्यम् : ग इत्यस्य क तथा ख इत्येतयोः बहुविधं उत्तराधिकारः अस्ति, अतः ग मध्ये क तथा ख इत्येतयोः समाननामयुक्तान् सदस्यान् आह्वयति समये अस्पष्टता भविष्यति।
(2) कारणम् : C A तथा B इत्यस्मात् समाननाम (विभिन्न नामस्थानक्षेत्रं) सदस्यं उत्तराधिकारं प्राप्नोति, अतः C इत्यस्य वस्तुना सह आह्वानं कुर्वन् संकलकः निर्धारयितुं न शक्नोति यत् वयं कस्य आह्वानं कर्तुम् इच्छामः
(३) समाधानम् १ : घटनां परिहरितुं क-खयोः सार्वजनिकसदस्यानां नामकरणं पुनः पुनः संघर्षं न कुर्वन्तु। किन्तु एतत् कदाचित् अनियंत्रितम् अस्ति।
(4) समाधानम् 2: कोडिंग् करणकाले कस्य आह्वानं कर्तव्यमिति स्पष्टतया निर्दिशन्तु, cA::func() इत्यस्य उपयोगेन स्पष्टतया निर्दिष्टं कुर्वन्तु यत् B वर्गस्य फंक्शन् इत्यस्य स्थाने A वर्गस्य func आह्वयति।
(5) समाधानं 3: C मध्ये func पुनः परिभाषयन्तु, ततः C मध्ये func आह्वयति, A तथा B मध्ये func गोपनीयं भविष्यति।
(6) सारांशः- समाधानं कर्तुं शक्यते, परन्तु सत्समाधानं नास्ति।
बहुविरासतस्य अस्पष्टता २
(1) परिदृश्यम् : हीरकविरासतसमस्या।अर्थात् A इति पूर्वजवर्गः, B1:A, B2:A, C:B1,B2 अस्मिन् समये A इत्यस्मिन् मेथड् आह्वयितुं C इत्यस्य ऑब्जेक्ट् इत्यस्य उपयोगं कुर्वन् अस्पष्टता भविष्यति ।
(2) विश्लेषणम् : c.func() अस्पष्टम्, cA::func() अपि अस्पष्टम् अस्ति, परन्तु c.B1::func() तथा c.B2::func() अस्पष्टौ न सन्ति
(३) समाधानम् : समस्या १ इत्यस्य समानं, परन्तु समस्या २ अधिका सूक्ष्मा, परिहारः कठिना च अस्ति
// 祖类
class Aa {
public:
void show() { std::cout << "A's method" << std::endl; }
};
// 派生类 B1 和 B2,从 A 继承
class B1 : public Aa {
public:
void show() { std::cout << "B1's show" << std::endl; }
void showB1() { std::cout << "B1's method" << std::endl; }
};
class B2 : public Aa {
public:
void show() { std::cout << "B2's show" << std::endl; }
void showB2() { std::cout << "B2's method" << std::endl; }
};
// 派生类 C,从 B1 和 B2 继承
class C : public B1, public B2 {
public:
void showC() { std::cout << "C's method" << std::endl; }
};
int test070103() {
C c;
// c.Aa::show(); // 调用 A 的方法 不可以
c.Aa::B1::show(); // 调用 A 的方法 不可以
c.B2::Aa::show(); // 调用 A 的方法 不可以
c.B1::show(); // 调用 B1 的方法
c.B2::show(); // 调用 B2 的方法
c.showB1(); // 调用 B1 的方法
c.showB2(); // 调用 B2 的方法
c.showC(); // 调用 C 的方法
return 0;
}
आभासी उत्तराधिकारस्य उपयोगः कथं भवति
(1) परिदृश्यम् : हीरकस्य उत्तराधिकारः अस्पष्टतायाः समस्यां जनयति मूलतः पौत्रवर्गे C मध्ये B1 तथा B2 इत्यत्र द्वौ A वस्तुनि सन्ति, अतः अस्पष्टता अस्ति।
(2) आभासी उत्तराधिकारसमाधानम् : B1 तथा B2 A वर्चुअल् रूपेण उत्तराधिकारं प्राप्नुवन्तु, ततः C B1 तथा B2 सामान्यतया उत्तराधिकारं प्राप्तुं शक्नोति।
(3) आभासी उत्तराधिकारः तावत् सरलः अस्ति ।
आभासी उत्तराधिकारस्य कार्यान्वयनसिद्धान्तः
(1) आभासी उत्तराधिकारस्य सिद्धान्तः अस्ति : आभासी आधारवर्गसारणी सूचकः vbptr तथा आभासी आधारवर्गसारणी आभासीसारणी
(2)सन्दर्भः : १.https://blog.csdn.net/xiejingfa/लेख/विवरण/48028491
संयोजनं किम् इति अवगच्छन्तु वर्गवर्गे अन्यवर्गप्रकारस्य बहवः सदस्यचराः सन्ति ।
रचनायाः उत्तराधिकारस्य च भेदं ज्ञातव्यम्
अस्पष्टता : यदि भवान् कञ्चन कार्यं निष्पादयति तर्हि तत् भवता निर्दिष्टं न भवेत् ।
समाधानम् : आह्वानं क्रियमाणं वर्गं स्पष्टतया निर्दिष्टुं cA::func() इत्यस्य उपयोगं कुर्वन्तु
आभासी उत्तराधिकारः किञ्चित् सशर्तसंकलन इव अस्ति तस्य परिचयप्रभावं प्राप्तुं पुनः पुनः परिचयस्य आवश्यकता नास्ति ।
अध्ययनस्य अभिलेखाः उल्लङ्घनसम्पर्काः च विलोपिताः भविष्यन्ति।
स्रोतः : शिक्षकस्य झू इत्यस्य इन्टरनेट् आफ् थिङ्ग्स् कक्षा