SlideShare a Scribd company logo
Brought to you by
www.freshmaza.com
 This tutorial offers several things.
 You’ll see some neat features of the language.
 You’ll learn the right things to google.
 You’ll find a list of useful books and web pages.
 But don’t expect too much!
 It’s complicated, and you’ll learn by doing.
 But I’ll give it my best shot, okay?
 Basic syntax
 Compiling your program
 Argument passing
 Dynamic memory
 Object-oriented programming
#include <iostream>
using namespace std;
float c(float x) {
return x*x*x;
}
int main() {
float x;
cin >> x;
cout << c(x) << endl;
return 0;
}
 Includes function definitions
for
console input and output.
 Function declaration.
 Function definition.
 Program starts here.
 Local variable declaration.
 Console input.
 Console output.
 Exit main function.
CppTutorial.ppt
// This is main.cc
#include <iostream>
#include “mymath.h”
using namespace std;
int main() {
// ...stuff...
}
// This is mymath.h
#ifndef MYMATH
#define MYMATH
float c(float x);
float d(float x);
#endif
Functions are declared in mymath.h, but not defined.
They are implemented separately in mymath.cc.
main.cc mymath.cc mydraw.cc
g++ -c main.cc g++ -c mymath.cc g++ -c mydraw.cc
  
  
  
g++ -o myprogram main.o mathstuff.o drawstuff.o
main.o mymath.o mydraw.o

myprogram 
// This is main.cc
#include <GL/glut.h>
#include <iostream>
using namespace std;
int main() {
cout << “Hello!” << endl;
glVertex3d(1,2,3);
return 0;
}
 Include OpenGL functions.
 Include standard IO
functions.
 Long and tedious
explanation.
 Calls function from standard
IO.
 Calls function from
OpenGL.
 Make object file.
 Make executable, link
GLUT.
 Execute program.
% g++ -c main.cc
% g++ -o myprogram –lglut main.o
% ./myprogram
 Software engineering reasons.
 Separate interface from implementation.
 Promote modularity.
 The headers are a contract.
 Technical reasons.
 Only rebuild object files for modified source files.
 This is much more efficient for huge programs.
INCFLAGS = 
-
I/afs/csail/group/graphics/courses/6.837/public/includ
e
LINKFLAGS = 
-L/afs/csail/group/graphics/courses/6.837/public/lib 
-lglut -lvl
CFLAGS = -g -Wall -ansi
CC = g++
SRCS = main.cc parse.cc curve.cc surf.cc camera.cc
OBJS = $(SRCS:.cc=.o)
PROG = a1
all: $(SRCS) $(PROG)
$(PROG): $(OBJS)
$(CC) $(CFLAGS) $(OBJS) -o $@ $(LINKFLAGS)
.cc.o:
$(CC) $(CFLAGS) $< -c -o $@ $(INCFLAGS)
depend:
makedepend $(INCFLAGS) -Y $(SRCS)
clean:
rm $(OBJS) $(PROG)
main.o: parse.h curve.h tuple.h
# ... LOTS MORE ...
Most assignments include
makefiles, which describe
the files, dependencies, and
steps for compilation.
You can just type make.
So you don’t have to know
the stuff from the past few
slides.
But it’s nice to know.
CppTutorial.ppt
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
float f[n];
for (int i=0; i<n; i++)
f[i] = i;
return 0;
}
Arrays must have known
sizes at compile time.
This doesn’t compile.
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
float *f = new float[n];
for (int i=0; i<n; i++)
f[i] = i;
delete [] f;
return 0;
}
Allocate the array during
runtime using new.
No garbage collection, so
you have to delete.
Dynamic memory is
useful when you don’t
know how much space
you need.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<float> f(n);
for (int i=0; i<n; i++)
f[i] = i;
return 0;
}
STL vector is a resizable
array with all dynamic
memory handled for you.
STL has other cool stuff,
such as strings and sets.
If you can, use the STL
and avoid dynamic
memory.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<float> f;
for (int i=0; i<n; i++)
f.push_back(i);
return 0;
}
An alternative method
that does the same thing.
Methods are called with
the dot operator (same as
Java).
vector is poorly named,
it’s actually just an array.
float twice1(float x) {
return 2*x;
}
void twice2(float x) {
x = 2*x;
}
int main() {
float x = 3;
twice2(x);
cout << x << endl;
return 0;
}
 This works as expected.
 This does nothing.
 The variable is
unchanged.
vector<float>
twice(vector<float> x) {
int n = x.size();
for (int i=0; i<n; i++)
x[i] = 2*x[i];
return x;
}
int main() {
vector<float>
y(9000000);
y = twice(y);
return 0;
}
There is an incredible
amount of overhead here.
This copies a huge array
two times. It’s stupid.
Maybe the compiler’s
smart. Maybe not. Why
risk it?
void twice3(float *x) {
(*x) = 2*(*x);
}
void twice4(float &x) {
x = 2*x;
}
int main() {
float x = 3;
twice3(&x);
twice4(x);
return 0;
}
 Pass pointer by value
and
access data using
asterisk.
 Pass by reference.
 Address of variable.
 The answer is 12.
 You’ll often see objects passed by reference.
 Functions can modify objects without copying.
 To avoid copying objects (often const references).
 Pointers are kind of old school, but still useful.
 For super-efficient low-level code.
 Within objects to handle dynamic memory.
 You shouldn’t need pointers for this class.
 Use the STL instead, if at all possible.
CppTutorial.ppt
 Classes implement objects.
 You’ve probably seen these in 6.170.
 C++ does things a little differently.
 Let’s implement a simple image object.
 Show stuff we’ve seen, like dynamic memory.
 Introduce constructors, destructors, const, and
operator overloading.
 I’ll probably make mistakes, so some debugging too.
Live Demo!
 The C++ Programming Language
 A book by Bjarne Stroustrup, inventor of C++.
 My favorite C++ book.
 The STL Programmer’s Guide
 Contains documentation for the standard template library.
 http://www.sgi.com/tech/stl/
 Java to C++ Transition Tutorial
 Probably the most helpful, since you’ve all taken 6.170.
 http://www.cs.brown.edu/courses/cs123/javatoc.shtml

More Related Content

Similar to CppTutorial.ppt (20)

PPT
Cppt 101102014428-phpapp01
Getachew Ganfur
 
PPTX
C++ language
Hamza Asif
 
PDF
Cpprm
Shawne Lee
 
PPT
2.overview of c++ ________lecture2
Warui Maina
 
PDF
Basic c++ 11/14 for python programmers
Jen Yee Hong
 
PPTX
Basic C++ 11/14 for Python Programmers
Appier
 
PPTX
C++ Overview PPT
Thooyavan Venkatachalam
 
PDF
C++primer
leonlongli
 
PPT
C++ Language
Syed Zaid Irshad
 
PPT
Apclass (2)
geishaannealagos
 
TXT
Advance C++notes
Rajiv Gupta
 
PPT
Apclass
geishaannealagos
 
PPTX
cppt-170218053903.pptxhjkjhjjjjjjjjjjjjjjj
supriyaharlapur1
 
PPTX
CPP-overviews notes variable data types notes
SukhpreetSingh519414
 
PDF
ANSI C REFERENCE CARD
Tia Ricci
 
PPT
C++ Introduction
parmsidhu
 
PPTX
C++ process new
敬倫 林
 
PPTX
Presentation on C++ Programming Language
satvirsandhu9
 
PPT
Apclass (2)
geishaannealagos
 
Cppt 101102014428-phpapp01
Getachew Ganfur
 
C++ language
Hamza Asif
 
Cpprm
Shawne Lee
 
2.overview of c++ ________lecture2
Warui Maina
 
Basic c++ 11/14 for python programmers
Jen Yee Hong
 
Basic C++ 11/14 for Python Programmers
Appier
 
C++ Overview PPT
Thooyavan Venkatachalam
 
C++primer
leonlongli
 
C++ Language
Syed Zaid Irshad
 
Apclass (2)
geishaannealagos
 
Advance C++notes
Rajiv Gupta
 
cppt-170218053903.pptxhjkjhjjjjjjjjjjjjjjj
supriyaharlapur1
 
CPP-overviews notes variable data types notes
SukhpreetSingh519414
 
ANSI C REFERENCE CARD
Tia Ricci
 
C++ Introduction
parmsidhu
 
C++ process new
敬倫 林
 
Presentation on C++ Programming Language
satvirsandhu9
 
Apclass (2)
geishaannealagos
 

More from HODZoology3 (8)

PPT
6_2019_03_09!01_32_17_AM.ppt
HODZoology3
 
PPT
Indian Silk Industry for Kashmir University.ppt
HODZoology3
 
PPTX
Phylum Porifera.pptx
HODZoology3
 
PPTX
Phylum Mollusca.pptx
HODZoology3
 
PPTX
Phylum Arthropoda.pptx
HODZoology3
 
PPTX
PARENTAL CARE.pptx
HODZoology3
 
PPTX
Larval%20forms%20of%20trematodes%20%5e0%20cestodes%20ppt%5e (2).pptx
HODZoology3
 
PPTX
Arterial System-WPS Office.pptx
HODZoology3
 
6_2019_03_09!01_32_17_AM.ppt
HODZoology3
 
Indian Silk Industry for Kashmir University.ppt
HODZoology3
 
Phylum Porifera.pptx
HODZoology3
 
Phylum Mollusca.pptx
HODZoology3
 
Phylum Arthropoda.pptx
HODZoology3
 
PARENTAL CARE.pptx
HODZoology3
 
Larval%20forms%20of%20trematodes%20%5e0%20cestodes%20ppt%5e (2).pptx
HODZoology3
 
Arterial System-WPS Office.pptx
HODZoology3
 

Recently uploaded (20)

PPTX
Cultivation practice of Litchi in Nepal.pptx
UmeshTimilsina1
 
PPTX
Identifying elements in the story. Arrange the events in the story
geraldineamahido2
 
PPTX
care of patient with elimination needs.pptx
Rekhanjali Gupta
 
PDF
Reconstruct, Restore, Reimagine: New Perspectives on Stoke Newington’s Histor...
History of Stoke Newington
 
PDF
Governor Josh Stein letter to NC delegation of U.S. House
Mebane Rash
 
PDF
Geographical diversity of India short notes by sandeep swamy
Sandeep Swamy
 
PPTX
PPT-Q1-WEEK-3-SCIENCE-ERevised Matatag Grade 3.pptx
reijhongidayawan02
 
PPTX
How to Set Up Tags in Odoo 18 - Odoo Slides
Celine George
 
PPTX
Stereochemistry-Optical Isomerism in organic compoundsptx
Tarannum Nadaf-Mansuri
 
PPTX
STAFF DEVELOPMENT AND WELFARE: MANAGEMENT
PRADEEP ABOTHU
 
PDF
Dimensions of Societal Planning in Commonism
StefanMz
 
PDF
DIGESTION OF CARBOHYDRATES,PROTEINS,LIPIDS
raviralanaresh2
 
PPTX
QUARTER 1 WEEK 2 PLOT, POV AND CONFLICTS
KynaParas
 
PDF
0725.WHITEPAPER-UNIQUEWAYSOFPROTOTYPINGANDUXNOW.pdf
Thomas GIRARD, MA, CDP
 
PDF
The Constitution Review Committee (CRC) has released an updated schedule for ...
nservice241
 
PPTX
How to Create a PDF Report in Odoo 18 - Odoo Slides
Celine George
 
PPTX
grade 5 lesson matatag ENGLISH 5_Q1_PPT_WEEK4.pptx
SireQuinn
 
PPTX
Universal immunization Programme (UIP).pptx
Vishal Chanalia
 
PPTX
How to Create Odoo JS Dialog_Popup in Odoo 18
Celine George
 
PDF
Knee Extensor Mechanism Injuries - Orthopedic Radiologic Imaging
Sean M. Fox
 
Cultivation practice of Litchi in Nepal.pptx
UmeshTimilsina1
 
Identifying elements in the story. Arrange the events in the story
geraldineamahido2
 
care of patient with elimination needs.pptx
Rekhanjali Gupta
 
Reconstruct, Restore, Reimagine: New Perspectives on Stoke Newington’s Histor...
History of Stoke Newington
 
Governor Josh Stein letter to NC delegation of U.S. House
Mebane Rash
 
Geographical diversity of India short notes by sandeep swamy
Sandeep Swamy
 
PPT-Q1-WEEK-3-SCIENCE-ERevised Matatag Grade 3.pptx
reijhongidayawan02
 
How to Set Up Tags in Odoo 18 - Odoo Slides
Celine George
 
Stereochemistry-Optical Isomerism in organic compoundsptx
Tarannum Nadaf-Mansuri
 
STAFF DEVELOPMENT AND WELFARE: MANAGEMENT
PRADEEP ABOTHU
 
Dimensions of Societal Planning in Commonism
StefanMz
 
DIGESTION OF CARBOHYDRATES,PROTEINS,LIPIDS
raviralanaresh2
 
QUARTER 1 WEEK 2 PLOT, POV AND CONFLICTS
KynaParas
 
0725.WHITEPAPER-UNIQUEWAYSOFPROTOTYPINGANDUXNOW.pdf
Thomas GIRARD, MA, CDP
 
The Constitution Review Committee (CRC) has released an updated schedule for ...
nservice241
 
How to Create a PDF Report in Odoo 18 - Odoo Slides
Celine George
 
grade 5 lesson matatag ENGLISH 5_Q1_PPT_WEEK4.pptx
SireQuinn
 
Universal immunization Programme (UIP).pptx
Vishal Chanalia
 
How to Create Odoo JS Dialog_Popup in Odoo 18
Celine George
 
Knee Extensor Mechanism Injuries - Orthopedic Radiologic Imaging
Sean M. Fox
 

CppTutorial.ppt

  • 1. Brought to you by www.freshmaza.com
  • 2.  This tutorial offers several things.  You’ll see some neat features of the language.  You’ll learn the right things to google.  You’ll find a list of useful books and web pages.  But don’t expect too much!  It’s complicated, and you’ll learn by doing.  But I’ll give it my best shot, okay?
  • 3.  Basic syntax  Compiling your program  Argument passing  Dynamic memory  Object-oriented programming
  • 4. #include <iostream> using namespace std; float c(float x) { return x*x*x; } int main() { float x; cin >> x; cout << c(x) << endl; return 0; }  Includes function definitions for console input and output.  Function declaration.  Function definition.  Program starts here.  Local variable declaration.  Console input.  Console output.  Exit main function.
  • 6. // This is main.cc #include <iostream> #include “mymath.h” using namespace std; int main() { // ...stuff... } // This is mymath.h #ifndef MYMATH #define MYMATH float c(float x); float d(float x); #endif Functions are declared in mymath.h, but not defined. They are implemented separately in mymath.cc.
  • 7. main.cc mymath.cc mydraw.cc g++ -c main.cc g++ -c mymath.cc g++ -c mydraw.cc          g++ -o myprogram main.o mathstuff.o drawstuff.o main.o mymath.o mydraw.o  myprogram 
  • 8. // This is main.cc #include <GL/glut.h> #include <iostream> using namespace std; int main() { cout << “Hello!” << endl; glVertex3d(1,2,3); return 0; }  Include OpenGL functions.  Include standard IO functions.  Long and tedious explanation.  Calls function from standard IO.  Calls function from OpenGL.  Make object file.  Make executable, link GLUT.  Execute program. % g++ -c main.cc % g++ -o myprogram –lglut main.o % ./myprogram
  • 9.  Software engineering reasons.  Separate interface from implementation.  Promote modularity.  The headers are a contract.  Technical reasons.  Only rebuild object files for modified source files.  This is much more efficient for huge programs.
  • 10. INCFLAGS = - I/afs/csail/group/graphics/courses/6.837/public/includ e LINKFLAGS = -L/afs/csail/group/graphics/courses/6.837/public/lib -lglut -lvl CFLAGS = -g -Wall -ansi CC = g++ SRCS = main.cc parse.cc curve.cc surf.cc camera.cc OBJS = $(SRCS:.cc=.o) PROG = a1 all: $(SRCS) $(PROG) $(PROG): $(OBJS) $(CC) $(CFLAGS) $(OBJS) -o $@ $(LINKFLAGS) .cc.o: $(CC) $(CFLAGS) $< -c -o $@ $(INCFLAGS) depend: makedepend $(INCFLAGS) -Y $(SRCS) clean: rm $(OBJS) $(PROG) main.o: parse.h curve.h tuple.h # ... LOTS MORE ... Most assignments include makefiles, which describe the files, dependencies, and steps for compilation. You can just type make. So you don’t have to know the stuff from the past few slides. But it’s nice to know.
  • 12. #include <iostream> using namespace std; int main() { int n; cin >> n; float f[n]; for (int i=0; i<n; i++) f[i] = i; return 0; } Arrays must have known sizes at compile time. This doesn’t compile.
  • 13. #include <iostream> using namespace std; int main() { int n; cin >> n; float *f = new float[n]; for (int i=0; i<n; i++) f[i] = i; delete [] f; return 0; } Allocate the array during runtime using new. No garbage collection, so you have to delete. Dynamic memory is useful when you don’t know how much space you need.
  • 14. #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<float> f(n); for (int i=0; i<n; i++) f[i] = i; return 0; } STL vector is a resizable array with all dynamic memory handled for you. STL has other cool stuff, such as strings and sets. If you can, use the STL and avoid dynamic memory.
  • 15. #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<float> f; for (int i=0; i<n; i++) f.push_back(i); return 0; } An alternative method that does the same thing. Methods are called with the dot operator (same as Java). vector is poorly named, it’s actually just an array.
  • 16. float twice1(float x) { return 2*x; } void twice2(float x) { x = 2*x; } int main() { float x = 3; twice2(x); cout << x << endl; return 0; }  This works as expected.  This does nothing.  The variable is unchanged.
  • 17. vector<float> twice(vector<float> x) { int n = x.size(); for (int i=0; i<n; i++) x[i] = 2*x[i]; return x; } int main() { vector<float> y(9000000); y = twice(y); return 0; } There is an incredible amount of overhead here. This copies a huge array two times. It’s stupid. Maybe the compiler’s smart. Maybe not. Why risk it?
  • 18. void twice3(float *x) { (*x) = 2*(*x); } void twice4(float &x) { x = 2*x; } int main() { float x = 3; twice3(&x); twice4(x); return 0; }  Pass pointer by value and access data using asterisk.  Pass by reference.  Address of variable.  The answer is 12.
  • 19.  You’ll often see objects passed by reference.  Functions can modify objects without copying.  To avoid copying objects (often const references).  Pointers are kind of old school, but still useful.  For super-efficient low-level code.  Within objects to handle dynamic memory.  You shouldn’t need pointers for this class.  Use the STL instead, if at all possible.
  • 21.  Classes implement objects.  You’ve probably seen these in 6.170.  C++ does things a little differently.  Let’s implement a simple image object.  Show stuff we’ve seen, like dynamic memory.  Introduce constructors, destructors, const, and operator overloading.  I’ll probably make mistakes, so some debugging too.
  • 23.  The C++ Programming Language  A book by Bjarne Stroustrup, inventor of C++.  My favorite C++ book.  The STL Programmer’s Guide  Contains documentation for the standard template library.  http://www.sgi.com/tech/stl/  Java to C++ Transition Tutorial  Probably the most helpful, since you’ve all taken 6.170.  http://www.cs.brown.edu/courses/cs123/javatoc.shtml