В иерархии, как конструктор сына может устанавливать элементы конструктора деда в 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 сын менеджер отец и лицо и служащий являются дедушкой
с помощью этого вы можете иметь основную концепцию и о печати данных, которые зависят от вас, как вы делаете, чем. можно использовать функцию-член для ее печати.
Это не ответ. –
Это не может. Это не его работа. Каждый «уровень» может инициализировать только «уровень» над ним. Так и должно быть.
Однако это правило уходит, когда вы используете виртуальное наследование, и каждый «уровень» становится непосредственно ответственным за предоставление аргументов конструктора для каждого другого «уровня».
Re «Каждый« уровень »может инициализировать только« уровень »над ним.», Это не выполняется для виртуального наследования. То есть это неверно как общее утверждение. –
можно посмотреть код ниже и попробовать –
@ Cheersandhth.-Alf: Ум, прочитайте второй абзац? Я буквально все это сказал. –
Вы используете списки инициализаторов членов, чтобы передать аргументы в конструктор прямого базового класса.
Как
class Derived
: public Base
{
public:
Derived()
: Base("joo hoo") // ← A member initializer list
{}
};
конструктор базового класса, в свою очередь передать аргументы его базового класса конструктора, и так далее.
Это только в случае виртуальное наследование, что производная от производного & hellip; класс может непосредственно инициализировать класс «дедушка». И это передовая тема, вряд ли будет тем, о чем вы просите сейчас. Я предлагаю вам задать новый вопрос, если вы столкнулись с этой проблемой.
Что касается терминологии:
C++ терминология базовый класс (отец) и производный класс (сын).
Smalltalk терминология суперкласс (отец) и подкласс (сын).
Термины отец и сын, как правило, не используется (это первый раз, когда я вижу их!), Но иногда один использует родителя и ребенка для обозначения мест размещения в иерархии – из узлы, классы, что угодно.
Похожие, хотя и не используются в этом вопросе, чисто виртуальная функция в 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;
}
Но было бы лучше, чтобы добавить конструкторы father
и grandfather
как этого
grandfather::grandfather(int xx) :
x(xx) { }
father::father(int xx, int yy) :
grandfather(xx), y(yy) { }
, а затем son
как этого
son::son() : father(0, 1), z(2) { }
C++ терминология основана класс (отец) и производный класс (сын). Smalltalk terminlogy - суперкласс (отец) и подкласс (сын). –