Наследование обобщенных типов

Последнее обновление: 03.12.2023

C++

C#

Dart

C++

Наследование универсальности параметра:

#include <iostream> 
  
template <typename T>
class Person {
public:
    Person(T id, std::string name) : id{id}, name{name} { }
    void print() const 
    {
        std::cout << "Id: " << id << "\tName: " << name << std::endl;
    }
protected:
    T id;
    std::string name;
};

template <typename T>
class Employee: public Person<T> {
public:
    Employee(T id, std::string name, std::string company) : Person<T>{id, name}, company{company} { }
    void print() const 
    {
        Person<T>::print();
        std::cout << "Works in " << company << std::endl;
    }
private:
    std::string company;
};

int main()
{
    Employee<unsigned> bob{123, "Bob", "Google"};
    bob.print();    // Id: 123 Name: Bob
                    // Bob works in Google
}

Явная типизация при наследовании:

#include <iostream> 
  
template <typename T>
class Person {
public:
    Person(T id, std::string name) : id{id}, name{name} { }
    void print() const 
    {
        std::cout << "Id: " << id << "\tName: " << name << std::endl;
    }
protected:
    T id;
    std::string name;
};

class Employee: public Person<unsigned> {
public:
    Employee(unsigned id, std::string name, std::string company) : Person{id, name}, company{company} { }
    void print() const 
    {
        Person::print();
        std::cout << name << " works in " << company << std::endl;
    }
private:
    std::string company;
};

int main()
{
    Employee bob{123, "Bob", "Google"};
    bob.print();    // Id: 123 Name: Bob
                    // Bob works in Google
}

C#

Наследование универсальности параметра:

Employee<int> bob = new(123, "Bob", "Google");
bob.Print();

class Person<T>
{
	T id;	// идентификатор пользователя
	string name; // имя пользователя
	public Person(T id, string name)
    {
        this.id = id;
        this.name = name;
    }
    public virtual void Print() => Console.WriteLine($"id: {id} \t name: {name}");
}
class Employee<T>: Person<T>
{
	string company;
	public Employee(T id, string name, string company)
        :base(id, name)
    {
        this.company = company;
    }
	public override void Print()
    {
		base.Print();
		Console.WriteLine($"Works in {company}");
	}
}

Явная типизация при наследовании:

Employee bob = new(123, "Bob", "Google");
bob.Print();

class Person<T>
{
	T id;	// идентификатор пользователя
	string name; // имя пользователя
	public Person(T id, string name)
    {
        this.id = id;
        this.name = name;
    }
    public virtual void Print() => Console.WriteLine($"id: {id} \t name: {name}");
}
class Employee: Person<int>
{
	string company;
	public Employee(int id, string name, string company)
        :base(id, name)
    {
        this.company = company;
    }
	public override void Print()
    {
		base.Print();
		Console.WriteLine($"Works in {company}");
	}
}

Dart

Наследование универсальности параметра:

void main (){
	
	Employee bob = Employee(123, "Bob", "Google");
	bob.display();
}

class Person<T>{
	T id;	// идентификатор пользователя
	String name; // имя пользователя
	Person(this.id, this.name);

    void display() => print("id: $id \t name: $name");
}
class Employee<T> extends Person<T>{
	String company;
	Employee(super.id, super.name, this.company);
	@override
	void display(){
		super.display();
		 print("Works in $company");
	}
}

Явная типизация при наследовании:

void main (){
	
	Employee bob = Employee(123, "Bob", "Google");
	bob.display();
}

class Person<T>{
	T id;	// идентификатор пользователя
	String name; // имя пользователя
	Person(this.id, this.name);

    void display() => print("id: $id \t name: $name");
}
class Employee extends Person<int>{
	String company;
	Employee(super.id, super.name, this.company);
	@override
	void display(){
		super.display();
		 print("Works in $company");
	}
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850