【发布时间】:2012-10-06 08:06:05
【问题描述】:
以下代码在g++ 4.6.3 for Linux下编译
#include <iostream>
class A {
public:
int x;
std::string c;
A(int x,std::string c):x(10),c("Hi"){
}
~A(){
std::cout << "Deleting A()" << std::endl;
}
};
class B : public A {
public:
B():A(20,"Hello"){
}
~B(){
std::cout << "Deleting B()" << std::endl;
}
};
int main(){
B o;
std::cout << o.x << std::endl;
std::cout << o.c << std::endl;
return(0);
}
但它没有做应该做的事情,类型 B 无法更改它从 A 继承的 2 个变量的值。
关于为什么这不能正常工作的任何解释?
【问题讨论】:
-
仅仅因为您将构造函数的参数命名为与您的成员相同,这并不意味着它们会被某种魔法复制,您必须手动执行此操作。
标签: c++ inheritance initializer-list