From C to C++ · 2 Why C++ is much more fun than C (C++ FAQ)? 1. Classes & methods - OO design 2....

Post on 02-Jun-2020

1 views 0 download

transcript

From C to C++

2

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

3

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

History

4

The C++ Prog. Manual (85-

90) C++98 C++03 C++11 C++14

Default in

g++

Minor

changes

auto,

lambdas,

threading,

Auto

return

type,

generic

lambdas,

binary

literals,…

Minor

changes

Major

changes

History

5

The C++ Prog. Manual (85-

90) C++98 C++03 C++11 C++14

Default in

g++

Minor

changes

auto,

lambdas,

threading,

Auto

return

type,

generic

lambdas,

binary

literals,…

Minor

changes

Major

changes

We’ll learn parts of C++-11, Mostly parts that makes C++ more “pythonic”

while keeping it efficient

Course Objectives

6

1. Learn the language

2. Practice of programming data structures

Design

Testing & Debugging

Efficiency & Portability

Modularity

Course structure

7

• The basic mechanism underlying many of the extensions.

Overloading

• The C++ version. Object Oriented

programing

• A hidden monster Copying and Conversion

• Templates - Generics++. Compile time

polymorphism

• Statics, etc. Other topics

First Program in C++

8

// 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;

}

Compiling & Running…

9

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!

>

Fill in missing types from C, in somewhat

crude way

10

The missing types

strings in C++

11

#include <iostream> #include <string> int main() { 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; }

More about string functions:

http://www.cppreference.com/cppstring

Boolean variables

12

#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";

}

}

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 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

enum Season {

WINTER, // = 0 by default

SPRING, // = WINTER + 1

SUMMER, // = WINTER + 2

AUTUMN // = WINTER + 3

};

Use enum to eliminate magic

numbers – alternative to #define

#include <stdio.h>

#include <stdlib.h>

enum{INPUT_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

17

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!

enum class Season : char {

WINTER, // = 0 by default

SPRING, // = WINTER + 1

SUMMER, // = WINTER + 2

AUTUMN // = WINTER + 3

};

enums – why?

More readable code

Code less error prone

Accessible for debugger

Use of the numerical values is not disabled

bad programming usually!

18

Understand and remember.

• More than syntactic sugar.

• This is how a lot of stuff works under

the hood (e.g. inheritance)

19

Overloading

#include <stdio.h> void foo() { printf ("foo()\n"); } void foo(int n) { printf ("foo(%d)\n", n); } int main() { foo(12); foo(); return 0; }

Function overloading - C

20

Compilation output:

Error: Multiple definition of foo

Function overloading – C++

21

#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()

Default parameters

22

#include <iostream> void foo(int n=5) { std::cout << n; } int main() { foo(); }

Output:

Compile, and print: foo(5)

Overload resolution

23

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.