여기 내 첫 번째 게시물! 나는 수년간이 사이트를 참고로 사용하여 일반적인 문제에 대한 해결책을 찾고 있습니다. 불행히도 내가 직면하고있는이 문제는 아직 여기에서 발견되지 않은 문제입니다! 그래서 여기 있습니다. 나는 얼마 동안 프로젝트에서 일해왔다. 내 프로그램에는 수천 줄의 코드가 있으므로 여기에 모두 게시하지 않을 것입니다. 기본적으로 부모 클래스를 이미 내 코드에서 초기화 된 하위 클래스로 변경하려는 하위 클래스가 있습니다. 이것이 가능한지 또는 좋은 코드 연습인지 확실하지 않습니다. 그러나 나는 너희들이 그것의 재판관이되게 할 것이다! 여기에 내가 직면하고있는 문제는 다음과 같습니다C++ 하위 클래스 내의 상위 클래스 변경
이 컴파일 그렇다면#include <stdio.h>
class Base
public:
int data;
Base(int);
};
class Child : public Base
{
public:
Child(void);
void run(Base*);
};
Base::Base(int var)
{
data=var;
}
void Child::run(Base* base)
{
this = base //I know that you can create a reference to the parent class
//by casting this pointer to a Base pointer, but was wondering
//if you can do this the other way around.
printf("%d\n",Base::data);
}
int main()
{
Base* base1 = new Base(5);
Base* base2 = new Base(3);
Child one();
one.run(base1);
delete base1;
delete base2;
base1=0;
base2=0;
return 0;
}
는 5 같은 것을 outputt 것 내가 run 메소드 매개 변수를 변경할 경우 3. 같은이인가 인쇄해야 base2하는 (이되지 않습니다) 가능한? 고맙습니다!
실제로 * this = * base는 Child :: operator = (const Base &) 정의. static_cast (b) = c ;, Base :: operator =를 호출 할 수 있습니다. 가상 함수의 존재 여부에 관계없이 항상 잘 정의되어 있습니다. –
궁금합니다. 왜이 유형의 과제를 방해 하시겠습니까? this = * base? 나는 컴파일러 오류가있어,하지만 방금 기본 포인터로 lvalue 캐스팅하고 잘 작동합니다. 모든 데이터를 복사하거나 대입 연산자를 오버로드하는 메서드를 만들 수는 있지만 부모 클래스는 많은 양의 데이터를 가지고 있으며 매우 복잡합니다. –
'* this = * base'를 정확한 코드가 아닌 개념적인 것으로서 취급하십시오. –