Як правило, клас як тип, визначений користувачем, повинен містити приховані (private) поля і наступні функціональні елементи:
§ конструктори, що визначають, як ініціалізувати об'єкти класу;
§ набір методів і властивостей, що реалізовують характеристики класу;
§ класи виключень, використовувані для повідомлень про помилки шляхом генерації виняткових ситуацій.
Класи, що моделюють математичні або фізичні поняття, зазвичай так само містять набір операцій, що дозволяють копіювати, привласнювати, порівнювати об'єкти і проводити з ними інші дії, потрібні по суті класу.
Перевантажені операції класу повинні мати інтуїтивно зрозумілий загальноприйнятий сенс (наприклад, не слід примушувати операцію + виконувати що-небудь, окрім складання або додавання). Якщо яка-небудь операція перевантажена, слід перенавантажувати і аналогічні операції, наприклад + і ++ (компілятор цього автоматично не зробить). При цьому операції повинні мати ту ж семантику, що і їх стандартні аналоги.
У переважній більшості класів для реалізації дій з об'єктами класу переважно використовувати не операції, а методи, оскільки їм можна дати осмислені імена.
Перевантажені методи, на відміну від операцій, застосовуються в класах завжди - як мінімум, використовується набір перевантажених конструкторів для створення об'єктів різними способами.
Методи із змінним числом параметрів реалізуються менш ефективно, чим звичайні, тому якщо, наприклад, потрібно передавати в метод два, три або чотири параметри, можливо, виявиться ефективнішим реалізувати не один метод з параметром раrams, а три перевантажені варіанти із звичайними параметрами.