編輯:沒有任何代碼是我的,它全部都給了我,我只是從對象分配方法的角度分析它。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