#endif // MATHEMATICS_HPP
```
--
* Includes.
* [{Include guards}](https://en.wikipedia.org/wiki/Include_guard).
* Macros.
* Macro functions.
---
## Naming Conventions
--
* Teammates should agree on naming conventions.
--
* Makes Project .green[consistent] and .green[easier to read].
--
* No matter what name convention you settle with your team.
--
* **Consistency** what matters.
--
* Descriptive names.
---
### Variables naming
--
```c++
int adenine_counter = 0; // all lower_case
```
--
```c++
int adenineCounter = 0; // camelCase
```
--
* It is optional for the team.
* But afterwards, the team should be consistent.
---
### Types naming
`struct` (or equivalently `class`) naming.
```c++
struct IntegerArray // PascalCase
{
// some data
}
```
* *PascalCase* is usually recommended for `struct` and `class` names.
* `struct` and `class` are the same. They both define new types.
---
### Functions naming
```c++
int countChar( CharArray &array , char query ) // camelCase
{
// Logic
}
```
```c++
int count_char( CharArray &array , char query ) // lower_case
{
// Logic
}
```
---
### Namespace naming
* recommended to be all *lower\_case*
---
### Popular Naming Conventions
* [{Google}](https://google.github.io/styleguide/cppguide.html#Naming)
* [{Geosoft}](http://geosoft.no/development/cppstyle.html)
---
## Const Correctness
When passing a *pointer* or *reference* that **should not be modified**. It is very recommended to add `const` qualifier, so you guarantee the function **won't modify its contents**.
```c++
struct IntegerNode
{
int data;
IntegerNode *next = nullptr;
};
struct IntegerLL
{
IntegerNode *front;
};
```
---
```c++
void insertBack( IntegerLL &list )
{
// Logic
}
```
---
```c++
void insertFront( IntegerLL &list )
{
// Logic
}
```
---
```c++
int front( IntegerLL &list )
{
list.front = nullptr; // !!!
// Logic
}
```
--
```c++
int front( const IntegerLL &list )
{
// Logic
}
```
---
```c++
int back( IntegerLL &list )
{
// What if your frind missed up with the list!
nuke( list );
// Logic
}
```
--
```c++
int back( const IntegerLL &list )
{
// Logic
}
```
---
```c++
void removeBack( IntegerLL &list )
{
// Logic
}
```
```c++
void removeFront( IntegerLL &list )
{
// Logic
}
```
---
```c++
void removeNode( IntegerLL &list , IntegerNode *node )
{
// Logic
}
```
```c++
void removeData( IntegerLL &list , int data )
{
// Logic
}
```
---
```c++
bool isEmpty( IntegerLL &list )
{
// Logic
}
```
--
```c++
bool isEmpty( const IntegerLL &list )
{
// Logic
}
```
---
```c++
void printAll( IntegerLL &list )
{
// Logic
}
```
--
```c++
void printAll( const IntegerLL &list )
{
// Logic
}
```
---
```c++
void clear( IntegerLL &list )
{
// Logic
}
```
---
## Advanced: Intro to Build Systems
[An introduction to build systems by *Marwan Abdellah, Ph.D, Blue Brain Project, EPFL*](http://bme-ws.yolasite.com/resources/Software%20Build%20Systems.pdf)
To access the workshop pages and materials: [{The Second Biomedical Engineering Workshop}](http://bme-workshop.weebly.com/material.html).
In depth:
Introduction to CMake from Kitware on Vimeo.
---
### Installation
```terminal
sudo apt-get install cmake
```
### Demo
---
## Teaser: C++ Awesome GUI
--
### Summer and Next Year Expectations
--
#### Agenda
* Object Oriented Programming in C++.
* STL and Qt in more depth.
* GUI using Qt.
---
---
---
#### Patience