编辑:没有任何代码是我的,它全部都给了我,我只是从对象分配方法的角度分析它。C++内存分配 - 分配子类到
我在内存分配方面非常辛苦。我向你保证,在过去的5个小时里,我已经看过这里的一百个例子。我知道这可能措辞不佳,我提前道歉。
1.)我不明白为什么版本2打印类A的f()而不是类B的。行
A* objA1 = objB;
被声明一个指针,objA1,它指向类型A的一个对象,它是分配其地址到objB指向,B(2,3)。我读过“如果它们是堆 - 动态对象,那么你可以将b1分配给a1”。当我打电话给objA1-> f()时,我只是说去这个地方,哦,你找到了一个B?把它投入A并调用f()。
2.)我会认为版本1切片objB,因为它是说这个对象已被分配空间A,等于B更大。但如果我把cout < <objB.bf;在此作业之后,它仍然有效。是一个objA1 = objB;不是静态声明objA1?再一次,为什么不打印B的f()?
3.)两个objA1作业有什么区别?因为哪些功能只适用于两者之一。如果你想给它一个过时的分类分类,你可以称它们为“堆 - 动态”吗?
class A {
private:
int a;
public:
A(int ia) {a = ia;}
void f() {
cout << "Call to method f defined in class A" << endl;
}
};
class B : public A {
private:
int b;
public:
B(int ia, int ib) : A(ia) {b = ib;}
void f() {
cout << "Call to method f specialized in class B" << endl;
}
void bf() {
cout << "Call to class B own method bf" << endl;
}
};
// C++ driver - Version 1
void main() {
A objA = A(1);
B objB = B(2,3);
objA.f();
objB.f();
objB.bf();
A objA1 = objB;
objA1.f();
}
// C++ driver - Version 2
void main() {
A* objA = new A(1);
B* objB = new B(2,3);
objA->f();
objB->f();
objB->bf();
A* objA1 = objB;
objA1->f();
}
'main'返回'int',而不是'void'。 – GManNickG