如何正确地从带有模板的类继承?

时间:2019-05-06 12:41:32

标签: c++ templates

我对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(){
} 

我希望从car类继承并添加更多内容,同时能够访问和运行main()中两个派生类的代码

1 个答案:

答案 0 :(得分:3)

为什么指针ptcs?没有用。如果要访问派生类中基类的私有成员,请编写getter:

#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();
}

顺便说一句,您可能要搜索的搜索词是“好奇地重复使用模板模式”。