Как правильно наследовать от классов с шаблонами? - PullRequest
0 голосов
/ 06 мая 2019

Я довольно новичок в C ++ и у меня есть сомнения по поводу шаблонов и полиморфизма.Итак, я делал базовые функции с шаблонами, но потом подумал, что хочу работать с классами и попытаться сделать наследование.Так может кто-то правильно направить меня?

Я только немного попробовал и только что получил ошибки.Я действительно новичок, поэтому я не знаю много ...: P

Вот код, который я набрал до сих пор:

template <class temp>
class car{
public:
    temp colour;
    temp *ptcs = &colour;
    temp setChar(temp a){
    *ptcs = a;
    }
    virtual void sayChar()=0;
};

class lambo : public car<string>{
public:
    void sayChar(){
    cout << "My characteristic : " << *ptcs << endl;
    }
};

class chiron : public car<string>{
public:
    void sayChar(){
        cout << "My characteristic : " << *ptcs << endl;
    }    
};

int main(){
} 

Я ожидаю наследовать от класса автомобиля и добавитьболее того, при этом есть возможность доступа и запуска кода из обоих производных классов в main ()

1 Ответ

3 голосов
/ 06 мая 2019

Почему указатель ptcs?Там нет смысла для этого.Если вы хотите получить доступ к закрытым элементам базы в производном классе, напишите геттер:

#include <string>
#include <iostream>

template <class T>
class car {
    T colour;
public:
    void setChar(T a) { colour = a; }
    T getChar() const { return colour; }
};

class lambo : public car<std::string> {
public:
    void sayChar() const {
        std::cout << "My characteristic : " << getChar() << '\n';
    }
};

class chiron : public car<std::string> {
public:
    void sayChar() const {
        std::cout << "My characteristic : " << getChar() << '\n';
    }
};

int main()
{
    lambo foo;
    foo.setChar("red");
    foo.sayChar();

    chiron bar;
    bar.setChar("blue");
    bar.sayChar();
}

Кстати, поисковый запрос, который вы можете искать, - «Любопытно повторяющийся шаблон».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...