Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

C++ Intro: Object-Oriented Programming & Code::Blocks IDE, Study notes of History

Computer ArchitectureData Structures and AlgorithmsOperating SystemsSoftware Engineering

An introduction to C++ programming, focusing on object-oriented programming concepts and using the Code::Blocks IDE. Topics covered include the history of C++, when to use C++, creating a C++ class, and using the Code::Blocks IDE for writing and compiling C++ code.

What you will learn

  • When is it appropriate to use C++ instead of other programming languages?
  • How do you compile and run a C++ program using the Code::Blocks IDE?
  • How do you create a C++ class?
  • What is object-oriented programming in C++?
  • What are the advantages of using the Code::Blocks IDE for C++ development?

Typology: Study notes

2021/2022

Uploaded on 08/05/2022

char_s67
char_s67 🇱🇺

4.5

(110)

1.9K documents

1 / 45

Toggle sidebar

Related documents


Partial preview of the text

Download C++ Intro: Object-Oriented Programming & Code::Blocks IDE and more Study notes History in PDF only on Docsity! Introduction to C++: Part 1 tutorial version 0.2 Brian Gregor Research Computing Services Getting started with the room B27 terminals  Log on with your BU username  On the desktop is a Training Files folder. Open it and go to the subfolder: RCS_Tutorials\Tutorial Files\Introduction to C++  Copy the CodeBlocks Projects folder to your desktop. Tutorial Outline: Part 1  Very brief history of C++  Definition object-oriented programming  When C++ is a good choice  The Code::Blocks IDE  Object-oriented concepts  First program!  Some C++ syntax  Function calls  Create a C++ class Very brief history of C++ For details more check out A History of C++: 1979−1991 C C++ Object-oriented programming  Object-oriented programming (OOP) seeks to define a program in terms of the things in the problem (files, molecules, buildings, cars, people, etc.), what they need, and what they can do. • Data: • molecular weight, structure, common names, etc. • Methods: • IR(wavenumStart, wavenumEnd) : return IR emission spectrum in range class GasMolecule GasMolecule ch4 GasMolecule co2 spectrum = ch4.IR(1000,3500) Name = co2.common_name Objects (instances of a class) “pseudo-code” When to choose C++  Despite its many competitors C++ has remained popular for ~30 years and will continue to be so in the foreseeable future.  Why?  Complex problems and programs can be effectively implemented  OOP works in the real world!  No other language quite matches C++’s combination of performance, expressiveness, and ability to handle complex programs.  Choose C++ when:  Program performance matters  Dealing with large amounts of data, multiple CPUs, complex algorithms, etc.  Programmer productivity is less important  It is faster to produce working code in Python, R, Matlab or other scripting languages!  The programming language itself can help organize your code  Ex. In Matlab almost everything is a vector or matrix.  Access to libraries that will help with your problem  Ex. Nvidia’s CUDA Thrust library for GPUs  Your group uses it already! “If you’re not at all interested in performance, shouldn’t you be in the Python room down the hall?” ― Scott Meyers (author of Effective Modern C++) Code::Blocks  In this tutorial we will use the Code::Blocks integrated development environment (IDE) for writing and compiling C++  Run it right on the terminal or on the SCC (module load codeblocks)  About C::B  cross-platform: supported on Mac OSX, Linux, and Windows  Oriented towards C, C++, and Fortran, supports others such as Python  Short learning curve compared with other IDEs such as Eclipse or Visual Studio  Has its own automated code building system, so we can concentrate on C++  It can convert its build system files to make and Makefiles so you are not tied to C::B  Project homepage: http://www.codeblocks.org IDE Advantages  Handles build process for you  Syntax highlighting and live error detection  Code completion (fills in as you type)  Creation of files via templates  Built-in debugging  Code refactoring (ex. Change a variable name everywhere in your code)  Higher productivity IDEs available on the SCC  Code::Blocks (used here)  geany – a minimalist IDE, simple to use  Eclipse – a highly configurable, adaptable IDE. Very powerful but with a long learning curve  Spyder – Python only, part of Anaconda Some Others  Xcode for Mac OSX  Visual Studio for Windows  NetBeans (cross platform)  Step 2. Choose the Console category and then the Console application and click Go.  Step 3: Click Next on the “Welcome to the new console application wizard!” screen.  Step 4: Choose C++!  …then click Next.  Step 5. Enter a project title. Let C::B fill in the other fields for you. If you like you can change the default folder to hold the project. Click Next.  Step 8: Your project is now created! Click on Sources in the left column, then double-click main.cpp.  Click the icon in the toolbar or press F9 to compile and run the program. Hello, World!  Console window:  Build and compile messages Behind the Scenes: The Compilation Process header files iostream.h my_headerh (ee) * Expanded source code file * not normally visible * g++-E to see output C++ preprocessor C++ compiler main.cpp “ ~ * Assembler code file * not normally visible * g++-Sto see output Object code file main.o C++ library files system library files assembler Executable linker Q++ -o main main.cpp main Header Files  C++ (along with C) uses header files as to hold definitions for the compiler to use while compiling.  A source file (file.cpp) contains the code that is compiled into an object file (file.o).  The header (file.h) is used to tell the compiler what to expect when it assembles the program in the linking stage from the object files.  Source files and header files can refer to any number of other header files. #include <iostream> using namespace std; int main() { string hello = "Hello"; string world = "world!"; string msg = hello + " " + world ; cout << msg << endl; msg[0] = 'h'; cout << msg << endl; return 0; } C++ language headers aren’t referred to with the .h suffix. <iostream> provides definitions for I/O functions, including the cout function. Slight change  Let’s put the message into some variables of type string and print some numbers.  Things to note:  Strings can be concatenated with a + operator.  No messing with null terminators or strcat() as in C  Some string notes:  Access a string character by brackets or function:  msg[0]  “H” or msg.at(0)  “H”  C++ strings are mutable – they can be changed in place.  Press F9 to recompile & run. #include <iostream> using namespace std; int main() { string hello = "Hello"; string world = "world!"; string msg = hello + " " + world ; cout << msg << endl; msg[0] = 'h'; cout << msg << endl; return 0; } A first C++ class: string  string is not a basic type (more on those later), it is a class.  string hello creates an instance of a string called “hello”.  hello is an object.  Remember that a class defines some data and a set of functions (methods) that operate on that data.  Let’s use C::B to see what some of these methods are…. #include <iostream> using namespace std; int main() { string hello = "Hello"; string world = "world!"; string msg = hello + " " + world ; cout << msg << endl; msg[0] = 'h'; cout << msg << endl; return 0; } A first C++ class: string  Start typing “msg.size()” until it appears in the list. Once it’s highlighted (or you scroll to it) press the Tab key to auto-enter it.  On the right you can click “Open declaration” to see how the C++ compiler defines size(). This will open basic_string.h, a built-in file. A first C++ class: string  Tweak the code to print the number of characters in the string, build, and run it.  From the point of view of main(), the msg object has hidden away its means of tracking and retrieving the number of characters stored.  Note: while the string class has a huge number of methods your typical C++ class has far fewer! #include <iostream> using namespace std; int main() { string hello = "Hello" ; string world = "world!" ; string msg = hello + " " + world ; cout << msg << endl ; msg[0] = 'h'; cout << msg << endl ; cout << msg.size() << endl ; return 0; }  Note that cout prints integers without any modification!  More on this behavior later. Basic Syntax  C++ syntax is very similar to C, Java, or C#. Here’s a few things up front and we’ll cover more as we go along.  Curly braces are used to denote a code block (like the main() function): { … some code … }  Statements end with a semicolon:  Comments are marked for a single line with a // or for multilines with a pair of /* and */ :  Variables can be declared at any time in a code block. void my_function() { int a ; a=1 ; int b; } int a ; a = 1 + 3 ; // this is a comment. /* everything in here is a comment */ Built-in (aka primitive or intrinsic) Types  “primitive” or “intrinsic” means these types are not objects  Here are the most commonly used types.  Note: The exact bit ranges here are platform and compiler dependent!  Typical usage with PCs, Macs, Linux, etc. use these values  Variations from this table are found in specialized applications like embedded system processors. Name Name Value char unsigned char 8-bit integer short unsigned short 16-bit integer int unsigned int 32-bit integer long unsigned long 64-bit integer bool true or false Name Value float 32-bit floating point double 64-bit floating point long long 128-bit integer long double 128-bit floating point http://www.cplusplus.com/doc/tutorial/variables/ Need to be sure of integer sizes?  In the same spirit as using integer(kind=8) type notation in Fortran, there are type definitions that exactly specify exactly the bits used. These were added in C++11.  These can be useful if you are planning to port code across CPU architectures (ex. Intel 64-bit CPUs to a 32-bit ARM on an embedded board) or when doing particular types of integer math.  For a full list and description see: http://www.cplusplus.com/reference/cstdint/ Name Name Value int8_t uint8_t 8-bit integer int16_t uint16_t 16-bit integer int32_t uint32_t 32-bit integer int64_t uint64_t 64-bit integer #include <cstdint> Reference and Pointer Variables  Variable and object values are stored in particular locations in the computer’s memory.  Reference and pointer variables store the memory location of other variables.  Pointers are found in C. References are a C++ variation that makes pointers easier and safer to use.  More on this topic in Part 2. string hello = "Hello"; string *hello_ptr = &hello; string &hello_ref = hello; The object hello occupies some computer memory. The asterisk indicates that hello_ptr is a pointer to a string. hello_ptr variable is assigned the memory address of object hello which is accessed with the “&” syntax. The & here indicates that hello_ref is a reference to a string. The hello_ref variable is assigned the memory address of object hello automatically. Type Casting cont’d  const_cast<new type>( expression )  Variables labeled as const can’t have their value changed.  const_cast lets the programmer remove or add const to reference or pointer type variables.  If you need to do this, you probably need to re-think your code.  reinterpret_cast<new type>( expression )  Takes the bits in the expression and re-uses them unconverted as a new type. Also only works on reference or pointer type variables.  Sometimes useful when reading in binary files and extracting parameters. “unsafe”: the compiler will not protect you here and the programmer must make sure everything is correct! Danger! Functions  Open the project “FunctionExample” in C::B files  Compile and run it!  Open main.cpp  4 function calls are listed.  The 1st and 2nd functions are identical in their behavior.  The values of L and W are sent to the function, multiplied, and the product is returned.  RectangleArea2 uses const arguments  The compiler will not let you modify their values in the function.  Try it! Uncomment the line and see what happens when you recompile.  The 3rd and 4th versions pass the arguments by reference with an added & float RectangleArea1(float L, float W) { return L*W ; } float RectangleArea2(const float L, const float W) { // L=2.0 ; return L*W ; } float RectangleArea3(const float& L, const float& W) { return L*W ; } void RectangleArea4(const float& L, const float& W, float& area) { area= L*W ; } The function arguments L and W are sent as type float. Product is computed The return type is float. Using the C::B Debugger  To show how this works we will use the C::B interactive debugger to step through the program line-by-line to follow the function calls.  Make sure you are running in Debug mode. This turns off compiler optimizations and has the compiler include information in the compiled code for effective debugging.