階層では、息子のコンストラクタが祖父のコンストラクタのメンバーをC++でどのように設定できるかを示します。階層では、息子のコンストラクタがC++で祖父のコンストラクタのメンバーを設定する方法
祖父>父>息子
階層では、息子のコンストラクタが祖父のコンストラクタのメンバーをC++でどのように設定できるかを示します。階層では、息子のコンストラクタがC++で祖父のコンストラクタのメンバーを設定する方法
祖父>父>息子
#include<iostream>
#include<string>
using namespace std;
class Person{
int age;
protected :
string name;
public:
Person(int a,string s)
{
age=a;
name=s;
}
Display_0()
{
cout<<"\nName : "<<name;
cout<<"\nAge : "<<age;
}
};
class Employe {
int employeid;
protected :
double salary;
public:
Employe(int id,double sal)
{
employeid=id;
salary=sal;
}
Display_1()
{
cout<<"Id is : "<<employeid;
cout<<"\nSalary is : "<<salary;
}
};
class Manager : public Person, public Employe
{
string type;
public:
Manager(string t,int id,double sal,int age,string name) : Employe(id, sal) , Person(age, name)
{
type=t;
}
string get_type()
{
return type;
}
Display_2()
{
Display_0();
cout << "\n";
Display_1();
cout<<"\nType is : "<<type;
}
};
class It_Manager : public Manager{
private :
int noOfPersons;
public:
It_Manager(int n,string na,int id,double sal,int age,string name) : Manager(na, id, sal, age, name)
{
noOfPersons=n;
}
Display_last()
{
Display_2();
cout<<"\nNo of Persons : "<<noOfPersons;
}
};
main()
{
It_Manager b(1,"Computer Scientist",152118,150000,100,"Muhammad Owais") ;
b.Display_last() ;
}
It_Managerは息子 マネージャでは、父 で、人とEmployeはあなたが基本的な考え方を持っているし、あなたがより行うどのように依存したデータを印刷に関することができ、このの助けを借りて、祖父
です。メンバー関数を使用して印刷することができます。
これは答えではありません。 –
できません。それはその仕事ではありません。各「レベル」は、その上の「レベル」のみを初期化することができます。それはそうであるべきである。
ただし、仮想継承を使用するとこの規則はなくなり、各 "レベル"は他のすべての "レベル"のコンストラクタ引数の提供に直接責任があります。
Re«各 "レベル"は、その上の "レベル"のみを初期化することができます»、それは仮想継承のために保持されません。私。一般的な声明としては間違っています。 –
それは可能です以下のコードを参照してくださいそれを試してください –
@ Cheersandhth. - Alf:ええと、第2段落を読んで?私は文字通りそのすべてを言った。 –
メンバーの初期化子リストを使用して、直接ベースクラスのコンストラクタに引数を渡します。
class Derived
: public Base
{
public:
Derived()
: Base("joo hoo") // ← A member initializer list
{}
};
順番にようにその基底クラスのコンストラクタに引数を渡す、となります基底クラスのコンストラクタのように。
仮想継承の場合にのみ派生した派生派生の&hellipです。クラスは "grandfather"クラスを直接初期化できます。それは高度な話題です。あなたが今尋ねていることであるとは思えません。その問題に遭遇した場合は、新しい質問をすることをお勧めします。
用語について:
C++用語は基底クラス(父)と派生クラス(息子)です。
Smalltalkの用語は、スーパー(父)とサブクラス(息子)です。
用語父と息子は、一般的に(それは私がそれらを参照してください最初の時間です!)は使用されませんが、時には1は、階層–の中で配置を示すために親と子を使用していますノード、クラス、何でも。この質問に使用されていないが
関連は、C++で純粋仮想機能はSmalltalkの中サブクラスの責任だ方法に対応しています。ここ
少なくとも初期設定の構文ではできません。これら
class grandfather {
int x;
};
class father : public grandfather {
int y;
};
class son : public father {
int z;
son();
};
のようなクラスが
son::son() : x(0), y(1), z(2) { }
を書くことを考えると有効ではありません。直接基底クラスのコンストラクタのみが使用でき、基底メンバーは使用できません。
son::son() : father(), z(2) {
x = 0;
y = 1;
}
しかし、この
grandfather::grandfather(int xx) :
x(xx) { }
father::father(int xx, int yy) :
grandfather(xx), y(yy) { }
してから、この
son::son() : father(0, 1), z(2) { }
よう
son
C++の用語の基礎となったクラス(のようfather
とgrandfather
にコンストラクタを追加する方が良いだろう。これが可能です父)と派生クラス(息子)。 Smalltalkのterminlogyはスーパークラス(父)とサブクラス(息子)です。 –