+ All Categories
Home > Documents > 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf ·...

6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf ·...

Date post: 12-Oct-2020
Category:
Upload: others
View: 2 times
Download: 0 times
Share this document with a friend
24
6.S096 Lecture 4 – Style and Structure Transition from C to C++ Andre Kessler January 15, 2014 Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 1 / 20
Transcript
Page 1: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

6.S096 Lecture 4 – Style and StructureTransition from C to C++

Andre Kessler

January 15, 2014

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 1 / 20

Page 2: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

Outline

1 Assignment Recap

2 Headers and multiple files

3 Coding style

4 C++

5 Wrap-up

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 2 / 20

Page 3: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

Assignment Recap

Assignment Recap

Floating point

Layout of 32-bit floating point numbers in memory.

Matrix multiply (1 & 2)

Static vs. dynamic allocation

Using a data structure

Optimizing for the cache

Transposition cipher

Safely allocating and reading an arbitrary-size string

Test data

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 3 / 20

Page 4: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

Headers and multiple files

Header files

Separation of declaration and definition

// in header (.h)

void increment( int *a );

// in source (.c)

void increment( int *a ) {

++*a;

}

Include guards (file myheader.h)

#ifndef _MYHEADER_H

#define _MYHEADER_H

void increment( int *a );

// ...your header stuff

#endif // _MY_HEADER_H

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 4 / 20

Page 5: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

Coding style

Coding style

Consistency and clarity above all.

Vertical space is precious; horizontal space is good

Always using { and } even if not needed

Again: be consistent.

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 5 / 20

Page 6: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

The Minimal C Program

nothing.c: takes no arguments, does nothing, returns 0 (“exit success”)

int main(void) {

return 0;

}

1 To compile: make nothing

2 Previous step produced an executable named nothing

3 To run: ./nothing

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 6 / 20

Page 7: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

The Minimal C++ Program

nothing.cpp: takes no arguments, does nothing, returns 0.

int main() {

return 0;

}

1 To compile: make nothing

2 Previous step produced an executable named nothing

3 To run: ./nothing

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 7 / 20

Page 8: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

Hello, world!

hello.cpp: takes no arguments, prints “Hello, world!”, returns 0

int main() {

return 0;

}

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 8 / 20

Page 9: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

Hello, world!

hello.cpp: takes no arguments, prints “Hello, world!”, returns 0

#include <cstdio>

int main() {

return 0;

}

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 9 / 20

Page 10: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

Hello, world!

hello.cpp: takes no arguments, prints “Hello, world!”, returns 0

#include <cstdio>

int main() {

printf( "Hello, world!\n" );

return 0;

}

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 10 / 20

Page 11: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

Hello, world!

hello.cpp: takes no arguments, prints “Hello, world!”, returns 0

#include <cstdio>

int main() {

printf( "Hello, world!\n" );

return 0;

}

1 To compile: make hello

2 Previous step produced an executable named hello

3 To run: ./hello

4 Hello, world!

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 11 / 20

Page 12: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

Hello, world!

hello.cpp: takes no arguments, prints “Hello, world!”, returns 0

#include <cstdio>

int main() {

printf( "Hello, world!\n" );

return 0;

}

1 To compile: make hello

2 Previous step produced an executable named hello

3 To run: ./hello

4 Hello, world!

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 11 / 20

Page 13: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

Hello, world!

hello.cpp: takes no arguments, prints “Hello, world!”, returns 0

#include <cstdio>

int main() {

printf( "Hello, world!\n" );

return 0;

}

1 To compile: make hello

2 Previous step produced an executable named hello

3 To run: ./hello

4 Hello, world!

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 11 / 20

Page 14: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

Hello, world! done better

hello.cpp: takes no arguments, prints “Hello, world!”, returns 0

#include <iostream>

int main() {

std::cout << "Hello, world!\n";

return 0;

}

1 To compile: make hello

2 Previous step produced an executable named hello

3 To run: ./hello

4 Hello, world!

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 12 / 20

Page 15: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

Hello, world! done better

hello.cpp: takes no arguments, prints “Hello, world!”, returns 0

#include <iostream>

int main() {

std::cout << "Hello, world!\n";

return 0;

}

1 To compile: make hello

2 Previous step produced an executable named hello

3 To run: ./hello

4 Hello, world!

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 12 / 20

Page 16: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

Hello, world! done better

hello.cpp: takes no arguments, prints “Hello, world!”, returns 0

#include <iostream>

int main() {

std::cout << "Hello, world!\n";

return 0;

}

1 To compile: make hello

2 Previous step produced an executable named hello

3 To run: ./hello

4 Hello, world!

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 12 / 20

Page 17: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

What is C++?

Multiparadigm programming language

Has procedural, object-oriented, functional, generic, andmetaprogramming features.

Procedural: underneath the surface, C++ is mostly C

Object-oriented: classes, encapsulation, inheritance, andpolymorphism

Generic: template metapgramming, programs that run duringcompilation

Standard Template Library (STL): common idioms, containers, andalgorithms

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 13 / 20

Page 18: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

The Key Differences

Generally, can compile C code with a C++ compiler

References vs pointers

C++ is more strongly typed

Stronger notions of casting, static cast<> and so on

At the same time, auto variables

C++ supports notions of immutability

const correctness and constexpr.

C++ has extensive abstraction mechanisms

Classes and wrapping our memory management

Templates template<typename T>

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 14 / 20

Page 19: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

Immutability and References

In addition to the good old pointer, C++ also has a notion of a reference.Let’s look at an increment function written in C:

void increment( int *a ) {

++*a;

}

// later: call it with

int a = 5;

increment( &a );

The C++ way:

void increment( int &a ) {

++a;

}

// later: call with

int a = 5;

increment( a );

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 15 / 20

Page 20: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

An example of abstraction

A safer array

// Interface

class Array {

size_t _size;

double *_elem;

public:

Array( size_t theSize );

~Array();

inline size_t size() const { return _size; };

double& operator[]( size_t i );

};

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 16 / 20

Page 21: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

C++ Resources

The C++ Programming Language, 4th ed. by Bjarne StroustropEffective C++, More Effective C++, and Effective STL by Scott Meyershttp://cplusplus.com

http://cppreference.com

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 17 / 20

Page 22: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

C++

Examples

Time for some examples...

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 18 / 20

Page 23: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

Wrap-up

Second Assignment

Second assignment is posted before midnight: three problems total 1000points

linklist (300, C)

geom (300, C++)

mst (400, C++)

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 19 / 20

Page 24: 6.S096 Lecture 4 { Style and Structureweb.mit.edu/6.s096/www/lecture/lecture04/lecture-04.pdf · 6.S096 Lecture 4 { Style and Structure Transition from C to C++ Andre Kessler January

Wrap-up

Wrap-up & Monday

Class on Friday is in 32-155 at 2pm.

Object-oriented programming in C++

Questions?

I’m available after class or on Piazza.

Andre Kessler 6.S096 Lecture 4 – Style and Structure January 15, 2014 20 / 20


Recommended