Думая о фрагментах кода как «объектов», может быть сложно сначала, но это, вероятно, будет одной из самых важных вещей, которые вы узнаете (поскольку объектно-ориентированное программирование широко используется в промышленности и науке). Для эффективного использования объектов на C++ достаточно много фона, но я попытаюсь дать краткое введение.
Во-первых, важно понимать разницу между «классом» и «классом», объект «. Класс - это абстракция, которая позволяет вам определить объект. Если я хочу создать объект Horse
, я использую класс Horse
, чтобы определить, что важно для лошади. Этот класс может иметь поля, определяющие его имя, владельца, цвет волос и т. Д. Однако класс Horse
не является лошадью. Он говорит вам, что значит быть Horse
, но это не одно. Для того, чтобы определить «объект» типа Horse
, мы должны написать следующее:
Horse myHorse = new Horse("Sea Biscuit", "Howard", "Black");
Имейте в виду, что Horse
класс, но сухарь является сама лошадь (объект).
Возможно, вы хорошо знаете вышеизложенное, но часто это может быть сложное понятие, чтобы понять, поэтому я подумал, что хочу упомянуть об этом.
Теперь, если вы хотите выполнить математику на некоторых объектах, это относительно просто с использованием функций-членов. Давайте определим новый класс, чтобы выполнить некоторую математику (потому что лошади и математика не смешиваются).
class Wallet
{
int _pennies;
// This is a constructor. It allows us to write: Wallet myWallet(100);
public Wallet(int pennies)
{
_pennies = pennies;
}
public void addPennies(int pennies)
{
_pennies = _pennies + pennies;
}
public void stealPennies(Wallet &stolenWallet)
{
int stolenPennies = stolenWallet._pennies;
stolenWallet._pennies = 0;
this.addPennies(stolenPennies);
}
}
Теперь мы можем сделать некоторые объекты и изменять поля в обоих объектах с одним вызовом stealPennies
:
int main()
{
Wallet myWallet(10); // Creates a wallet with 10 cents.
Wallet anotherWallet(50); // Creates another wallet with 50 cents.
myWallet.stealPennies(anotherWallet);
// myWallet now has 60 cents, and anotherWallet has none.
}
Примечание:&
перед именем аргумента в stealPennies
функция означает, что он будет принят ссылка. Обычно, когда вы передаете аргумент функции, он передается значением, что означает, что переменная в функции является копией аргумента, который вы передали. Помещение &
перед именем аргумента означает, что переменная в функции является той же переменной вместо копии. (Это очень упрощено. Маловероятно, что вы сможете полностью понять, проходя по ссылке, пока не познакомитесь с указателями). Кроме того, общепринятой практикой является использование какого-либо соглашения об именах при определении переменных, которые являются частью класса. Помещение подчеркивания перед именем переменной является общим (например, _pennies
в этом примере).
Надеюсь, это полезно для вас (и, надеюсь, оно работает, поскольку я не могу проверить его в данный момент). Я попытался сделать код максимально читабельным и явным.
Например, подумайте о 'string' (или' std :: string'). Я могу сказать 'string myString =" test ";' и установить строку для "test". Что это значит? Строка - это объект, созданный (или созданный экземпляр) из класса. Он содержит указатель на массив символов внутри (предположительно) и определяет функции для взаимодействия с другими строками. Например, я могу сказать 'myString.compare (anotherString)', и он возьмет другой объект строкового класса и сравним себя с этой строкой и вернет 'int'. – RyanP
_ «Я полагаю, что если я смогу участвовать в диалоге и задавать вопросы, это поможет мне понять!» _ Тогда вы не ищете репозиторий Q & A, а чат. К счастью, у нас есть некоторые из них здесь ... –