2015-01-14 24 views
0

我有一个问题,我有这个基类:抽象类,如何调用函数打印

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(); 
+0

出了什么问题'它 - >打印()'? – TartanLlama

+1

这个符号'it-> print();'不起作用。 – meernet

+2

@meernet它怎么不起作用?另外,为什么B的构造函数中的参数列表后面有逗号? –

回答

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; 
} 

注迭代器是如何在循环内部解除引用。

+0

好吧,我发现我的错误之前,但是谢谢 – meernet

2

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

(*it)->print(); 

但你可能要考虑一个C++ 11范围为基础的循环,而不是:

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