摘要class,如何调用函数print
Abstract class, how to call function print
我有问题,我有这个基地 class:
class A{
public:
/*...*/
virtual void print() = 0;
};
这里我做了一个 class 继承自 class "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
}
问题:如何调用class B中声明的函数print
?
我试过使用以下方法,但这种表示法没有给我一个好的结果:
vec.front()->print();
你的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;
}
注意迭代器是如何在循环内取消引用的。
在您的循环中,您需要取消引用迭代器和包含的指针。所以写这样的东西:
(*it)->print();
但您可能想考虑使用基于 C++11 范围的 for 循环:
for (auto ptr : vec)
ptr->print();
我有问题,我有这个基地 class:
class A{
public:
/*...*/
virtual void print() = 0;
};
这里我做了一个 class 继承自 class "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
}
问题:如何调用class B中声明的函数print
?
我试过使用以下方法,但这种表示法没有给我一个好的结果:
vec.front()->print();
你的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;
}
注意迭代器是如何在循环内取消引用的。
在您的循环中,您需要取消引用迭代器和包含的指针。所以写这样的东西:
(*it)->print();
但您可能想考虑使用基于 C++11 范围的 for 循环:
for (auto ptr : vec)
ptr->print();