一个C++的问题!# JobHunting - 待字闺中
a*U
1 楼
来源于面试题目,下面的code可以编译运行成功。关键是我觉得不应该编译运行成功,
请看下面我的comments。请高手指点。
#include
using namespace std;
class A
{
public:
virtual void test(){ cout <};
class B : public A
{
public:
virtual void test(){ cout <};
class C : public A
{
int value;
public:
C(){value = 1; }
virtual void test(){ cout <void accessValue() { cout << "value=" << value << endl; }
void setValue(int value){ this->value = value; }
};
int main()
{
B b;
C* c = (C*)&b;
A* a = &b;
c->A::test();
c->test();
c->setValue(100); //我觉得这里因该有问题,本身的对象是b,b应该没有
value这个member,我觉得应该是segment fault. 为何可以运行成功那?
c->accessValue();
A obja;
C* cc = static_cast(&obja);
cc->setValue(100);
cc->accessValue();
return 0;
}
请看下面我的comments。请高手指点。
#include
using namespace std;
class A
{
public:
virtual void test(){ cout <};
class B : public A
{
public:
virtual void test(){ cout <};
class C : public A
{
int value;
public:
C(){value = 1; }
virtual void test(){ cout <void accessValue() { cout << "value=" << value << endl; }
void setValue(int value){ this->value = value; }
};
int main()
{
B b;
C* c = (C*)&b;
A* a = &b;
c->A::test();
c->test();
c->setValue(100); //我觉得这里因该有问题,本身的对象是b,b应该没有
value这个member,我觉得应该是segment fault. 为何可以运行成功那?
c->accessValue();
A obja;
C* cc = static_cast
cc->setValue(100);
cc->accessValue();
return 0;
}