From C to C++
Why C++ is much more fun than C (C++ FAQ)? 1. Classes & methods - OO design 2. Generic programming - Templates allow for code reuse 3. Stricter type system (e.g. function args) 4. Some run-time checks & memory control A common and mature language that gives you high level and low level control Have fun 2
Why C++ is much more fun than c (C+ FQA)? 1. Tons of corner cases 2. Duplicate features 3. Cryptic syntax 4. Undecidable syntax (uncompilable progarms!) 5. No two compilers agree on it Probably one of the hardest computer languages to master. Have fun 3
History The C++ Prog. Manual (85-90) Default in g++ C++98 C++03 C++11 C++14 Minor changes auto, lambdas, threading, Major changes Auto return type, generic lambdas, binary literals, Minor changes 4
History The C++ Prog. Manual (85-90) Default in g++ C++98 C++03 C++11 C++14 Minor changes auto, lambdas, threading, Major changes Auto return type, generic lambdas, binary literals, Minor changes We ll learn parts of C++-11, Mostly parts that makes C++ more pythonic while keeping it efficient 5
Course Objectives 1. Learn the language 2. Practice of programming data structures Design Testing & Debugging Efficiency & Portability Modularity 6
Course structure Overloading The basic mechanism underlying many of the extensions. Object Oriented programing The C++ version. Copying and Conversion A hidden monster Compile time polymorphism Templates - Generics++. Other topics Statics, etc. 7
First Program in C++ // This line includes the standard // I/O library file (similar to copy here this file ) #include <iostream> int main() std::cout << "Hello class!\n"; return 0; 8
Compiling & Running In this course we ll use ubuntu standalone or c9io (ubuntu on the cloud) with the gcc (gnu compiler collection): > g++ -Wall -Wvla -Werror -g -D_GLIBCXX_DEBUG -std=c++11 Wall hello.cpp o hello > hello Hello class! > 9
The missing types Fill in missing types from C, in somewhat crude way 10
11 strings in C++ #include <iostream> More about string functions: #include <string> int main() http://www.cppreference.com/cppstring std::string str; int a; double b; std::cin >> str >> a >> b; if(std::cin.fail()) std::cerr << "input problem\n"; return 1; std::cout << "I got: "<< str << ' ' << a << ' ' << b << std::endl;
Boolean variables #include <iostream> int main() int a = 5; bool iszero = (a == 0); // same conditions if(!iszero && iszero==false && iszero!=true &&!!! iszero && a ) std::cout << "a is not zero\n"; 12
Enum (C)
User Defined Type - enum Enumerated data - a set of named constants. Usage: enum [identifier]enumerator list enum Season WINTER, // = 0 by default SPRING, // = WINTER + 1 SUMMER, // = WINTER + 2 AUTUMN // = WINTER + 3 ; enum SUNDAY=1, MONDAY, TUESDAY, ; // nameless enum Color BLACK,RED,GREEN,YELLOW,BLUE,WHITE=7,GRAY; // 0 1 2 3 4 7 8 14
enum enum Season WINTER, // = 0 by default SPRING, // = WINTER + 1 SUMMER, // = WINTER + 2 AUTUMN // = WINTER + 3 ; enum Season curr_season; curr_season= AUTUMN; curr_season= 19; // legal, but ugly, g++: warning int SUMMER; // error, redefinition int prev_season = SUMMER; // legal, but ugly, g++ warning 15
Use enum to eliminate magic numbers alternative to #define #include <stdio.h> #include <stdlib.h> enuminput_file_name = 1,OUTPUT_FILE_NAME,ARGS_NUM; int main(int argc, char* argv[]) if(argc!= ARGS_NUM) printf("usage: wc <input file name> <output file name>\n"); exit(1); FILE* infile, outfile; infile = fopen(argv[input_file_name],"r"); if( infile == NULL) printf("error reading file: %s\n", argv[input_file_name]); exit(1); 16
C++-11 enum class enum class Season : char WINTER, // = 0 by default SPRING, // = WINTER + 1 SUMMER, // = WINTER + 2 AUTUMN // = WINTER + 3 ; Season curr_season; curr_season= Season::AUTUMN; curr_season= SUMMER; // won t compile! curr_season= 19; // won t compile! int prev_season= Season::SUMMER; // won t compile! 17
enums why? More readable code Code less error prone Accessible for debugger Use of the numerical values is not disabled bad programming usually! 18
Overloading Understand and remember. More than syntactic sugar. This is how a lot of stuff works under the hood (e.g. inheritance) 19
Function overloading - C #include <stdio.h> void foo() printf ("foo()\n"); void foo(int n) printf ("foo(%d)\n", n); int main() foo(12); foo(); return 0; Compilation output: Error: Multiple definition of foo 20
Function overloading C++ #include <iostream> void foo() std::cout << "foo()\n"; void foo(int n) std::cout<<"foo("<<n<<")\n"; int main() foo(12); foo(); Output: Compile, and print: foo(12) foo() 21
Default parameters #include <iostream> void foo(int n=5) std::cout << n; int main() foo(); Output: Compile, and print: foo(5) 22
Overload resolution 1. Find all functions with same name candidates. Let s call them Ω 1 2. Find Ω 2 Ω 1 which have the correct number of arguments - viable candidates 3. Find Ω 3 Ω 2 with best matching arguments. if Ω 3 = 1: use that function. else (0 or more than 1): emit compilation error. 23