2013-05-02 3 views
1

C++에서 생성자 상속을 시도하려고했는데 제대로 작동했습니다. 그러나 그때 나는 실제로 클래스의 인스턴스에서 메서드를 호출 할 수 없다는 것을 알았습니다. 비주얼 스튜디오 자식 인스턴스에서 기본 클래스의 공용 메서드를 호출 할 수 없습니다.

방법 어머니 :: ShowName

그것까지 내가으로 관심을 자식 클래스에서 사용할 수 있어야하는 공공하더라도

사용할 수 없습니다 말했다. 내가 잘못하고있는 것이 있습니까?

class Mother{ 

protected: 
    char* name; 

public :  
    Mother(char* _name){ 
     name = _name; 
    } 

    void ShowName(){ 
     cout << "my name is: " << name << endl; 
    } 
}; 


class Daughter : Mother{ 
public: 
    Daughter(char* _name) : Mother(_name) { 
    } 
}; 

int main(){ 
    Daughter d1("Masha"); 
    d1.ShowName(); 

    return 0; 
} 
+0

첫 번째 클래스는 작동하지 않는 것이어야합니다. – thewhiteambit

+0

예, 복사했을 때 실수로 수도로 바뀌 었습니다. – msgmaxim

답변

15

class Daughter : Motherprivate이다. class 상속은 기본적으로 이와 같습니다.

class Daughter : public Mother 당신이 찾고있는 것입니다. 당신은 액세스 지정 공공를 사용하여 어머니의 클래스를 상속 할 필요가

class Daughter : public Mother 
+0

고마워요! 차이점을보기 시작한 C#에서 왔습니다. – msgmaxim

4

당신은 public 상속을 사용해야합니다. 기본적으로 C++은 비공개로 취급합니다.

2

Grigore가 지적했듯이 'public'을 명시 적으로 추가해야합니다. 도출 된 클래스가 클래스 키 구조체 및 개인으로 정의 할 때 때 가정

기본 클래스에 대한 액세스 지정이없는

공개 상정된다

FYI, C++ 표준은 다음과 같이 언급 클래스는 클래스 키 클래스로 정의됩니다.

관련 문제