2017-10-16 4 views
-1

Voici l'interfacerègles de portée variable privée C++

template <class Type> 
class stackADT 
{ 
public: 
    virtual void initializeStack() = 0; 
    virtual bool isEmptyStack() const = 0; 
    virtual bool isFullStack() const = 0; 
    virtual void push(const Type& newItem) = 0; 
    virtual Type top() const = 0; 
    virtual void pop() = 0; 
    virtual void reverseStack(stackType<Type>& otherStack) = 0; 
private: 
    int maxStackSize; 
    int stackTop; 
    Type *list; 
}; 

Voici la méthode de la pile inverse qui fait partie de stackType de classe qui étend stackADT

template <class Type> 
class stackType : public stackADT<Type> 
{ 
private: 
    int maxStackSize; 
    int stackTop; 
    Type *list; 
public: 
/*** 
Other methods ... 

**/ 
void reverseStack(stackType<Type>& otherStack) 
{ 

    int count = 0; 
    otherStack.list = new Type[maxStackSize]; // why does this WORK!!! its private 
    otherStack.stackTop = 0; // why does this WORK!!! its private 

    //copy otherStack into this stack. 
    for (int j = stackTop - 1; j >= 0; j--) 
    { 
     otherStack.push(list[j]); 
     count++; 
    } 
} 

Voici la boucle principale avec les appels.

stackType<int> stack1(50); 
stackType<int> stack2(50); 

stack1.initializeStack(); 
stack1.push(1); 
stack1.push(2); 
stack1.push(3); 
stack1.push(4); 
stack1.push(5); 
stack1.reverseStack(stack2); 

Alors qu'est-ce qui se passe avec cela dans la cause de C en Java, PHP, Python (dénomination mutilée), et d'autres OOD ne permettrait pas à ce sujet.

+0

* ne permet pas cela * - pouvez-vous être plus précis sur ce qu'est * this *? Votre code déclare également 'stackADT' mais utilise' stackType'. Lequel est-ce? –

+0

J'ai dit que l'interface est, modèle classe stackType: stackADT publique { privé ...... il étend – c3cris

+0

que je vois. C'est une bonne idée de poster un SSCCE (http://sscce.org) pour avoir une vue d'ensemble. En l'état, votre question ne décrit pas la relation entre 'stackADT' et' stackType', ce qui la rend confuse. –

Répondre

1

Je suppose que vous êtes confus ce que fait réellement le privé parce que cela fonctionnerait aussi en Java. Privé signifie que les instances d'autres classes (ou pas de classes, c'est-à-dire de fonctions) ne peuvent pas changer/appeler/invoquer/... ce membre/cette méthode. La partie importante ici est qu'il indique d'autres classes. Les instances de la même classe peuvent changer/appeler/invoquer/... les membres/méthodes privés.

+0

https://pastebin.com/jADSgXZv Je l'ai essayé et vous avez raison – c3cris

+0

Donc n'importe quelle autre instance de la classe peut appeler les méthodes ou variables privées d'une autre instance? – c3cris

+0

@ c3cris correct – Brotcrunsher

0

Comme indiqué, il ne serait pas compilé.

Le point est que la fonction reverseStack est censé être un lieu méthode membre, il devrait commencer par:
void stackADT::reverseStack(stackType<Type>& otherStack)
En tant que méthode membre, il a accès à des variables private.