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;
};

Вот метод обратного стека, который является частью класса stackType, который расширяет 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++;
}
}

Вот основной цикл с вызовами.

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);

Так что то, что происходит с этим в C ++, потому что в Java, PHP, Python (искаженное именование) и другие OOD не позволило бы этого.

-1

Решение

Я думаю, вы не понимаете, что на самом деле делает private, потому что это также будет работать в Java.

Приватный означает, что экземпляры других классов (или не имеющие классов, то есть функций) не могут изменить / вызвать / вызвать / … этот член / метод. Важной частью здесь является то, что это говорит другие классы. Экземпляры одного и того же класса могут изменять / вызывать / вызывать / … закрытые члены / методы.

1

Другие решения

Как показано, он не будет компилироваться.

Дело в том, что функция reverseStack должен быть член метод, поэтому он должен начинаться с:
void stackADT::reverseStack(stackType<Type>& otherStack)
Как метод-член, он имеет доступ к private переменные.

0

По вопросам рекламы [email protected]