class Bae
{
public:
Base(vector<int> vec)
{
  m_vec = vec;
}
vector<int> m_vec;
};
class Derived: public Base
{
 public:
Derived(vector<int> vec):Base(vec)
{

}

};
int main()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(2);

Base* pbase = NULL;
Derived d(vec;)
pbase = &d; //@1 这样可以初始化 Base中的成员 或者 new Derived(vec)
pbase = &Derived(vec); //@2 这样就不可以了. ????

return 1;
}

推荐图书

  • C++ Primer中文版(第4版)
  • More Effective C++:35个改善编程与设计的有效方法(中文版)
  • 设计模式:可复用面向对象软件的基础


1个回答

临时对象取地址有意义吗? 函数返回立马就销毁了

pbase = &d; //@1 这样可以初始化 Base中的成员 或者 new Derived(vec)

这也不叫初始化Base中的成员,Base中的成员早在Derived d(vec;)的时候就初始化了。

pbase = &d;

只是一个单纯的赋值,没有任何构造,初始化之类的行为。这句话是将d的地址赋值给pBase,因为子类类型可以转换为基类类型(反之不行),所以,&d是Derived* 类型的指针,转换为Base*类型的指针赋值给了pbase;