我有这门课
struct B {
B( int x=0 ) { }
virtual void something() {
std::cout << "B()";
}
};
struct A {
B b;
int a;
A( int a, int b_ ) : a(a), b(b_) {a}
};
我已经实现了另一个 C 类
struct C : public B {
C( int x ) : B(b) { }
virtual void something() {
std::cout << "C()";
}
};
让 A 使用 C 而不是 B 的最佳方法是什么?
我已经试过了:
struct A {
B & b;
int a;
A( int a, B &b_ ) : a(a), b(b_) {a}
};
但后来我必须使用std::map<int, A>
which 给出编译错误:
'A::A' : no appropriate default constructor available.
所以我这样做了:
struct A {
B & b;
int a;
A( int a=0, B &b_=B() ) : a(a), b(b_) {a}
};
在我的主要
std::map<int,A> mmap;
for( int i=0;i<5;++i ) {
auto & b = C();
mmap.insert( std::make_pair(i,A(i,b) ) ) ;
}
但是一旦auto & b
超出范围,这些 C 在 mmap 的 A 中的对象就会变成 B。
它不工作。如何解决?