The biggest difference between Modula-2 ADT's and C++ classes is that in Modula-2, the instance of the ADT that's being processed is passed as parameter to some function, while in C++ the functions work on the member variables of the object of which the function is being called. Modula-2:
MODULE StackTest; FROM SimpleIO IMPORT WriteInteger, WriteString, WriteLn; FROM IntStacks IMPORT IntStack, Create, Terminate, Push, Pop, Empty; VAR MyStack: IntStack; Elt: INTEGER; BEGIN IF Create(MyStack) THEN Push(MyStack, 27); Push(MyStack, 3); Pop(MyStack, Elt); WriteInteger(Elt, 4); WriteLn; Pop(MyStack, Elt); WriteInteger(Elt, 4); WriteLn; IF Empty(MyStack) THEN WriteString("Stack is now empty."); WriteLn; END; Terminate(MyStack) END END StackTest.
C++:
#include "intstack.h" #include <iostream.h> int main() { intstack mystack; // automatic creation int elt; mystack.push(27); mystack.push(3); mystack.pop(elt); cout << elt << endl; mystack.pop(elt); cout << elt << endl; if (mystack.empty()) cout << "Stack is now empty." << endl; return 0; // mystack will be automatically destroyed }