2014-12-20 3 views
1
#include <iostream> 

using namespace std; 

class aclass 
{ 
    public: 

    int a; 
}; 

class cclass: public aclass 
{ 
    public: 
    cclass() 
    { 
     a= //what do i write here// 
    } 
} 

class bclass : public aclass 
{ 
public: 
    bclass() 
    { 
     a=9;  //a is not constant here. I have just taken it const for simplicity. 
    } 

int func(); 
}; 


int bclass::func() 
{ 
    cclass * ob; 
    ob = new cclass(); 
} 

cclass의 객체에 대한 변수 a의 값을 객체를 생성하는 bclass 객체의 값 (cclass 객체)과 같게하려면 어떻게해야합니까? 나는 생성자에서 변수 초기화

ob->a = a; 

를 수행하여 기능 FUNC() 에 그것을 할 수 있습니다하지만 난 그것을 cclass의 생성자에서 어떻게해야합니까?

+0

난에 그 장을 다시 읽을 것이다 당신은 'bclass : FUNC'함수의 정의 전에 클래스 'cclass'의 정의를 추가해야합니다 book –

+0

나는 답을 썼지 만, 쓰려고하는 코드의 기본을 이해하지 못하는 것 같아서 삭제했다. 당신의 목표는 무엇입니까? –

+0

'new cclass'가있는 시점에서'cclass' 타입이 아직 선언되지 않았기 때문에 ** 실제 코드는 아닙니다 **. –

답변

1

:

class cclass: public aclass 
{ 
    bclass * bclass_ref; 
    cclass(bclass * ref) 
    { 
     bclass_ref = ref; 
     a = b_class_ref->a; 
    } 
} 

그럼 당신은 클래스 '에서 클래스'cclass '의 정의에이 키워드를 추가를 bclass '범위 :

ob = new cclass(this); 

참고 : 일부 컴파일러는 클래스의 생성자에 오류가 발생 할 수있다'cclass은 '당신이 오직 할 필요가있는 생성자를 공개합니다.

편집 : 나 자신에 의해 코드를 테스트

+0

아마도 bclass에 여분의 포인터를 사용하고있을 것입니다. 나는 당신이 작성한 것과 같은 일을했지만 여분의 bclass_ref 포인터를 사용하지 않고 직접 = ref-> a를 사용하고있다. – saurabh

+0

그래, 나는 앱이 함수를 종료 할 때 파괴되기 때문에, 미래의 refence를 bclass_ref라는 함수를 'bclass :: func'함수 밖에서 정의했다. 내 잘못이다. –

-2

func() 메서드에서 매개 변수로 전달해야합니다.

ob = new cclass (this.a);

+0

나는 이것을 downvoting하지 않는다. 올바른 방향이지만 C++에서는'this-> a' 또는'a' 만 써야한다. 'this.a'라는 표기법은 컴파일되지 않습니다. –

-2

키워드 "기본"자세한 내용은

base.a = 9 

당신은 생성자를 cclass에 반대 bclass 통과해야 this

+1

** - 1 ** 표준 C++에는'base'라는 키워드가 없습니다. –

1

을 확인 부모 속성에 대한 액세스를 허용 : -

class cclass: public aclass 
{ 
    cclass(const bclass& b) 
    { 
     a = b.a; 
    } 
} 

코드의 다른 특성을 무시하면됩니다.

당신은 그것의 정의에 클래스 'cclass'를 만든 클래스에 대한 포인터를 정의 할 수 있습니다