【发布时间】:2018-02-25 18:06:58
【问题描述】:
对于我的 C++ 程序,我有很多类,其中成员应该属于具有相同基类的两种类型之一。
我以为我可以用指针来实现它,但我没有让它工作。
示例:假设我们有一个类 A 和一个类 B 的成员 b_:
class A{
public:
A(B b): b_{b} {}
private:
B b_;
}
B类只有一个纯虚函数:
class B{
public:
virtual void print() = 0;
}
现在我有 B 的两个派生类,我想以某种方式更改 A,使其可以容纳 B1 或 B2 类的对象:
class B1: public B{
public:
void print(){cout << "B1\n";}
}
class B2: public B{
public:
void print(){cout << "B2\n";}
}
我的计划是使用唯一指针:
class A{
public:
A(std::unique_ptr<B> b): b_{std::move(b)} {}
private:
std::unique_ptr<B> b_;
}
int main(){
std::unique_ptr<B> b;
if (some condition){
b = make_unique<B1>(new B1()) ///?
}else{
b = make_unique<B2>(new B2()) ///?
}
A(b);
A.getB()->print();
}
【问题讨论】:
-
b = make_unique<B1>(new B1())??? ... 你是说b = make_unique<B1>()? -
错误是什么?
标签: c++ pointers inheritance