抽象类,如何调用函数打印

时间:2015-01-14 14:10:35

标签: c++ inheritance vector

我有一个问题,我有这个基类:

class A{
public:
    /*...*/
    virtual void print() = 0;
};

在这里,我创建了一个继承自“A”类

的类
class B : public A{
private:
    double a;
public:
    /*...*/
    B(double _a) : a(_a){ }
    void print() override{
        cout << a<<'\n';
    }
};

我用:

int main(){
/*...*/ 
std::vector<A*> vec; 
/* ... Here I added new object */
vec.push_back(new B(2)); 

for(__typeof(vec.begin()) it = (vec.begin()); it!= vec.end(); it++){
}
   //How to using and display function print which is declared inside class B
}

问题:如何调用在B类中声明的函数print

我尝试使用以下方法,但这种表示法并没有给我一个好结果:

vec.front()->print(); 

2 个答案:

答案 0 :(得分:5)

您的main只需要像这样:

int main(){

    std::vector<A*> vec; 
    /* ... Here I added new object */
    vec.push_back(new B(2)); 

    for(std::vector<A*>::iterator it = vec.begin(), end = vec.end(); it != end; ++it){
        (*it)->print();
    }

    return 0;
}

注意如何在循环内取消引用迭代器。

答案 1 :(得分:2)

在循环中,您需要取消引用迭代器和包含的指针。所以写点如下:

(*it)->print(); 

但是你可能想要考虑一个基于C ++ 11 ranged的for循环:

for (auto ptr : vec)
    ptr->print();