편집 : 코드 중 아무 것도 내 것이 아니며 모든 것이 나에게 주어졌으며 객체 할당 방법 관점에서 분석했습니다.C++ 메모리 할당 - 서브 클래스를 클래스에 할당
메모리 할당에 어려움을 겪고 있습니다. 지난 5 시간 동안 여기서 수백 건의 예를 보았습니다. 아마이 말은 잘 못된 것 같아서 미리 사과드립니다.
1.) 버전 2가 클래스 B 대신 클래스 A의 f()를 인쇄하는 이유를 이해할 수 없습니다. 라인
A* objA1 = objB;
는 A 유형의 객체를 가리키고 그것이 objB는, B (2,3)를 가리키는 곳에 그 주소를 할당되어 있는지, 포인터 objA1 선언된다. 나는 "heap-dynamic objects라면 b1을 a1에 할당 할 수있다"라는 문장을 읽었다. objA1-> f()를 호출하면 간단히이 위치로 이동한다고 말합니까? 아, B를 찾았습니까? 잘 A로 캐스팅하고 f()를 호출하십시오.
2.) 버전 1을 objB 슬라이스로 생각했을 것입니다. A가 할당 된이 객체를 설정했기 때문에 B가 더 큽니다. 그러나 만약 내가 약을 넣으면 < < objB.bf; 이 과제 후에도 여전히 유효합니다. A objA1 = objB; 정적으로 objA1을 선언하지 않습니까? 그리고 다시 한번, 왜 B의 f()를 인쇄하지 않을까요?
3.) 두 objA1 할당의 차이점은 무엇입니까? 어떤 기능이 2 가지 중 하나에서만 작동합니다. 낡은 종류의 분류를 원한다면 "heap-dynamic"이라고 부를 수 있을까요?
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'은'void'가 아닌'int'를 반환합니다. – GManNickG