Предварительные требования: основы функционального программирования и работы с памятью на C.

Когда я начал изучать C++, мне нужно было понять, с чего начать; было так много вещей, которые нужно было знать одновременно, что заставило меня задуматься над многими вопросами, пока я следил за учебниками на Youtube или читал документацию.

В этой серии статей я отвечу на вопросы, которые возникали у меня при изучении C++, а также на общие понятия, которые я обнаружил в своих 42 школьных модулях C++.

'C++ pool: серия заданий по C++ в 42 учебных программах школ кодирования, предназначенных для того, чтобы помочь учащимся с нуля стать героем программирования на C++'.

Откройте свой любимый редактор кода и начнем!

Бьорн Страутроп, известный ученый-компьютерщик, разработал объектно-ориентированный язык программирования C++ как член семейства языков C.

Что такое ООП?

Это парадигма компьютерного программирования, которая организует архитектуру программного обеспечения вокруг данных или объектов, а не функций и логики.

Что такое парадигма программирования?

Это причудливый способ назвать классификацию, стиль или способ программирования.

Что такое пространство имен?

Пространства имен используются для логической классификации кода и предотвращения конфликтов имен, которые особенно вероятны, когда ваша кодовая база содержит несколько библиотек. Библиотека – это группа предварительно скомпилированных функций, которые программа может использовать при программировании.

Давайте посмотрим на этот код (желательно попробовать его на своем компьютере XD):

#include <iostream> 

using namespace std;
  
//this is our first namespace with a function called greeting
 namespace area_one
 {    
    void greeting()
      {   
          cout << "Hello from area One!" << endl;   
      }
 }

//this is our second namespace with a function called greeting as well
namespace area_two
{    
    void greeting()
     {      
        cout << "Hello from area Two!" << endl;    
     }
 } 
 
int main () 
{     
      area_one::greeting();     
      area_two::greeting();     
      return 0; 
}
//output:
//Hello from area One!
//Hello from area Two!

В предыдущем коде мы использовали одно и то же имя функции (приветствие) два раза подряд, но с разными реализациями это обычно вызывает конфликт. Однако мы создали две отдельные «области», которые решили проблему после использования пространства имен.

Что такое библиотека C++?

Один или несколько заголовочных файлов и библиотека объектов составляют библиотеку C++. Определения классов и другая информация, необходимая для доступа к библиотечным функциям, содержится в файлах заголовков. Ваше программное обеспечение связывается со встроенными функциями и данными библиотеки объектов для создания исполняемой программы.

Что такое стандартная библиотека C++?

В объектно-ориентированном языке, таком как C++, классы, шаблоны классов и методы являются частью стандартной библиотеки.

Каждый элемент библиотеки C++ определен в пространстве имен std.

Что такое стандартное пространство имен?

Любой идентификатор из стандартной библиотеки должен быть помечен как относящийся к пространству имен std, чтобы его можно было использовать. Использование оператора разрешения области видимости «::» — один из способов добиться этого.

Что такое заголовок ‹iostream›?

Стандартная библиотека C++ содержит слишком много заголовков, заголовок iostream объявляет объекты, управляющие чтением и записью в стандартные потоки.

Какова связь между «iostream›» и стандартным форматом?

Для упорядочивания имен или программ в C++ используются пространства имен. В нем говорится, что все элементы, которые попадают в пространство имен «std», будут подвергаться оценке программой. Это пространство имен содержит каждое имя, которое генерирует файл iostream.

Почему "использование пространства имен std" является плохой практикой?

Использование пространства имен std может привести к конфликтам имен с другими пространствами имен, поскольку оно добавляет все идентификаторы пространства имен std в глобальное пространство имен.

Что такое класс?

Класс — это определяемый пользователем тип данных, который служит конструктором объектов для создания объектов, которые можно использовать в нашей программе.

Скажем, класс в «Транспортном средстве», объекты могут быть «автомобиль» или «автобус», атрибуты — цвет, форма или цена, а методы — вождение, мытье объектов транспортного средства.

Атрибуты и методы — это просто переменные и функции, принадлежащие классу.

Как создать класс?

#include <string>
class Student{            //name of this class with "class" keyword
   public:                 // access specifier
       std::string course;   //first attribute
       int            age;    //second attribute
};  //do not forget the semi column XD

Ключевое слово public означает, что члены класса (атрибуты и методы) доступны пользователям за пределами класса.

Спецификаторы доступа:

public:члены доступны за пределами класса.
private:доступ к членам или их просмотр из-за пределов класса невозможен.
защищено: доступ к членам вне класса невозможен, однако к ним можно получить доступ из унаследованных классов (позже мы обнаружим наследование).

Это простой класс, который создает объект типа Student.

Как создать объект?

#include <string>
#include <iostream>
class Student{ //Class "Student" created using the "class" keyword
   public:                 // access specifier
       std::string course;   //first attribute
       int         age;    //second attribute
};  //do not forget the semi column XD

int main()
{
    Student jhon;   
    Student sarah;   //We created two objects from Student's class
    jhon.course = "Maths";          
    sarah.age = 23;
    std::cout << jhon.course << std::endl;
    std::cout << sarah.age << std::endl;
}

Подождите, что происходит после создания наших объектов? Что ж, теперь мы можем присвоить значение атрибутам объекта public, используя точечный синтаксис, настолько простой, насколько это показано.

Что делать, если атрибуты являются частными?

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

Что ж, это очень просто, мы можем создавать сеттеры и геттеры для использования атрибутов даже с приватным спецификатором доступа.

#include <string>
#include <iostream>
class Student{                   //name of this class with "class" keyword
   private:                      // access specifier
       std::string course;       //first attribute
       int         age;          //second attribute
  public: 
       void setCourse(std::string course);    //attributes setters
       void setAge(int age);
       std::string getCourse(void);         //attributes getters
       int getAge(void);
};  //do not forget the semi column XD

// defining the member functions
void Student::setCourse(std::string course)
{ 
  this->course = course;
}
void Student::setAge(int age)
{ 
  this->age = age;
}

std::string Student::getCourse(void)
{ 
  return (this->course);
}
int Student::getAge(void)
{ 
  return (this->age);
}

int main()
{
    Student jhon;   
    Student sarah;   //We created two objects from Student's class
    jhon.setCourse("Maths");          
    sarah.setAge(23);
    std::cout << jhon.getCourse() << std::endl;
    std::cout << sarah.getAge() << std::endl;
}
//output
//Maths
//23

Что означает '::'?

Мы используем оператор разрешения области действия для определения функции-члена вне объявления ее класса.

Что такое указатель this?

Адрес экземпляра класса хранится в этом указателе на C++, который вызывается из функции-члена, чтобы разрешить функциям доступ к соответствующим членам данных объекта.

Нестатические функции-члены класса — единственные места, где доступен указатель this. Он обозначает объект, для которого выполняется вызов функции-члена.

Чтобы понять, как это работает, мы должны знать, что каждый созданный объект получает свою собственную копию члена данных, давайте возьмем атрибут «курс» в качестве примера. Объекты «Джон» и «Сара» могут иметь атрибут курса, но у каждого из них есть своя его копия.

Некоторые из основных применений ключевого слова this – это возврат объекта или различение элементов данных, как мы упоминали ранее.

Уже пять минут чтения XD, давайте продолжим открывать новые концепции в следующей части. Следите за обновлениями!

Вам понравилась эта статья? не забудьте подписаться на меня и открыть для себя следующие интересные темы: ключевое слово Const, конструкторы, ортодоксальная каноническая форма класса.

Лучшие полезные ресурсы: