下列等式正确的是()?
class Af{virtual ~A(){}};
class Bf{virtual ~B(){}};
class C:public A,public B{
};
C* pC = new C();
A*pA=(A*)pC;
B*pB=(B*)pC;
struct Base1 {...};
struct Base2 {...};
struct Derived : Base1, Base2 {...}; Base1 *pb1 = new Derived; pb1->polymorphicFunction();
Base2 *pb2 = new Derived; delete pb2;
Derived d; Base2 b2 = d;
struct Base {...};
struct Base1 : virtual Base {...};
struct Base2 : virtual Base {...};
struct Derived : Base1, Base2 {...}; struct Derived: Base1,Base2,...,BaseN {...}
BaseN *pbn = new Derived; struct Base1 {
virtual ~Base1() {}
virtual void v1() {}
virtual void v() {}
};
struct Base2 {
virtual ~Base2() {}
virtual void v2() {}
virtual void v3() {}
virtual void v() {}
};
struct Derived : Base1, Base2 {
~Derived() override {}
void v3() override {}
void v() override {}
}; Base2 *pb2 = new Derived; delete pb2;
#include<iostream>
using namespace std;
class A {
public:
virtual ~A() {};
};
class B {
public:
virtual ~B() {};
};
class C :public A, public B {
};
int main()
{
C* pC = new C();
A* pA = (A*)pC;
B* pB = (B*)pC;
cout << pA << endl;
cout << pB << endl;
cout << pC << endl;
system("pause");
return 0;
}
class C :public B, public A {
};
执行结果为: 0xc91a10 0xc91a18 0xc91a10 选A
虽然代码写的是pB = (B*)pC,但 C++ 编译器会在转换时自动调整指针偏移:
pA == pC && pB == pC题目一点都不严谨!!!😪