1 c++tutorial rob jagnow this tutorial will be best for students who have at least had some exposure...
TRANSCRIPT
![Page 1: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/1.jpg)
1
C++TutorialRob Jagnow
This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language .
![Page 2: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/2.jpg)
2
Overview• Pointers• Arrays and strings• Parameter passing• Class basics• Constructors & destructors• Class Hierarchy• Virtual Functions•• Coding tips• Advanced topics
Advanced topics: friends, protected, inline functions, const, static, virtual inheritance, pure virtual function (e.g. Intersect(ray, hit) = 0), class hierarchy.
![Page 3: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/3.jpg)
3
Pointers
int*intPtr;intPtr= new int;*intPtr= 6837;
delete intPtr;Int otherVal= 5;intPtr=&otherVal;
Create a pointer
Allocate memorySet value at given address
*intPtr
*intPtr
Deallocate memory
Change intPtr to point to
a new location
6837
0x0050
*intPtr 5 otherValintPtr 0x0054 &otherVal
![Page 4: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/4.jpg)
4
Arrays
• Stack allocationintintArray[10];intArray[0] = 6837;
• Heap allocationint*intArray;intArray= new int[10];intArray[0] = 6837;...delete[] intArrays
C++ arrays are zero-indexed.
![Page 5: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/5.jpg)
5
Strings
A string in C++ is an array of characterschar myString[20];strcpy(myString, "Hello World");
Strings are terminated with the NULLor'\0'charactermyString[0] = 'H';myString[1] = 'i';myString[2] = '\0';printf("%s", myString); output: Hi
![Page 6: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/6.jpg)
6
Parameter Passing• pass by value • intadd(inta, intb) {Make a local copy of a& b return a+b }
• inta, b, sum;• sum = add(a, b);
• pass by reference• intadd(int*a, int*b) {Pass pointers that reference a& b. Changes made to a or b will be reflected outside the add routine return *a+*b;}
• inta, b, sum;• sum = add(&a, &b);
![Page 7: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/7.jpg)
7
Parameter Passing
pass by reference –alternate notation
Int add(int&a, int&b) {
return a+b;}
inta, b, sum;
sum = add(a, b);
![Page 8: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/8.jpg)
8
Class Basics#ifndef_IMAGE_H Prevents multiple references#define _IMAGE_H_#include <assert.h> end if Include a library file
#include "vectors.h“ Include a local fileclass Image {public: Variables and functions. . . accessible from anywhereprivate: Variables and functions accessible . . . only from within this class};#end if
Note that “private:” is the default
![Page 9: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/9.jpg)
9
Creating an instance
Stack allocationImage myImage;
myImage.SetAllPixels(ClearColor);
Heap allocationImage *imagePtr;imagePtr= new Image();
imagePtr->SetAllPixels(ClearColor);. . .delete imagePtr;
Stack allocation: Constructor and destructor called automatically when the function is entered and exited.Heap allocation: Constructor and destructor must be called explicitly.
![Page 10: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/10.jpg)
10
Organizational Strategyimage.h Header file: Class definition & function prototypesvoid SetAllPixels(constVec3f &color)
image.C .C file: Full function definitionsvoid Image::SetAllPixels(constVec3f &color) {for (inti = 0; i < width*height; i++) data[i] = color;}
main.C Main code: Function referencesmyImage.SetAllPixels(clearColor);
![Page 11: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/11.jpg)
11
Constructors & Destructorsclass Image{ public:
Image(void){ width = height = 0;data = NULL;}~Image(void) {if (data != NULL)delete[] data;}intwidth;intheight;Vec3f *data;};
Constructor:
Called whenever a new
instance is created
Destructor:
Called whenever an
instance is deleted
![Page 12: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/12.jpg)
12
Constructors
Constructors can also take parametersImage(intw, inth) {width = w;height = h;data = new Vec3f[w*h];}
Using this constructor with stack or heap allocation:Image myImage= Image(10, 10); stack allocationImage *imagePtr;imagePtr= new Image(10, 10); heap allocation
![Page 13: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/13.jpg)
13
The Copy Constructor
• Image(Image*img) }• width = img->width;• height = img->height;• data = new Vec3f[width*height];• for (inti=0; i<width*height; i++)• data[i] = new data[i];}
• A default copy constructor is created automatically,• but it is usually not what you want:• Image(Image*img) {• width = img->width;• height = img->height;• data = img->data;}
Warning: if you do not create a default (void parameter) or copy constructor explicitly, they are created for you.
![Page 14: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/14.jpg)
14
Passing Classes as Parameters
• If a class instance is passed by reference, the copy constructor will be used to make a copy.
• Bool IsImageGreen(Image img); Computationally expensive
It’s much faster to pass by reference: Bool IsImageGreen(Image*img); or Bool IsImageGreen(Image&img);
![Page 15: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/15.jpg)
15
Class Hierarchy
Child classes inherit parent attributesclass Object3D {Vec3f color;}
class Sphere : public Object3D {float radius;
float radius;};
class Cone : public Object3D {
float base;
float height;};
Object3D
Sphere Cone
![Page 16: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/16.jpg)
16
Class HierarchyChild classes can callparent functionsSphere::Sphere() : Object3D()radius = 1.0;} Call the parent constructor
Child classes can override parent functionsclass Object3D { virtual void setDefaults(void){color = RED;}};class Sphere : public Object3D {void setDefaults(void) {color = BLUE;radius = 1.0 }};
![Page 17: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/17.jpg)
17
Virtual FunctionsA superclasspointer can reference a subclass objectSphere *mySphere= new Sphere();Object3D *myObject= mySphere;
If a superclasshas virtual functions, the correct subclass version will automatically be selected
class Object3D {virtual void intersect(Vec3f *ray, Vec3f *hit);};class Sphere : public Object3D {virtual void intersect(Vec3f *ray, Vec3f *hit);
};myObject->intersect(ray, hit);
Actually calls Sphere::intersect
Sub
clas
sS
uper
clas
s
![Page 18: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/18.jpg)
18
The main function
This is where your code begins execution
intmain(int argc, char** argv);
Number of Array of
arguments strings
argv[0]is the program name
argv[1]through argv[argc-1]are command-line input
![Page 19: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/19.jpg)
19
Coding tips
Use the #define compiler directive for constants#define PI 3.14159265#define sinf sin
Use the print for cout functions for output and debuggingPrintf("value: %d, %f\n", myInt, myFloat);cout<< "value:" << myInt<< ", "<< myFloat<<endl;
Use the assert function to test “always true” conditionsassert(denominator!= 0);quotient = numerator/denominator;
![Page 20: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/20.jpg)
20
“Segmentation fault (core dumped)”
Typical causes:
intintArray[10];
intArray[10] = 6837;
Image *img;
img>SetAllPixels (ClearColor)
Access outside of
array bounds
Attempt to access a NULL or previously deleted pointer
These errors are often very difficult to catch and can cause erratic,unpredictable behavior.
![Page 21: 1 C++Tutorial Rob Jagnow This tutorial will be best for students who have at least had some exposure to Java or another comparable programming language](https://reader036.vdocuments.us/reader036/viewer/2022062618/5515032e550346a80c8b54cb/html5/thumbnails/21.jpg)
21
Advanced topics
Lots of advanced topics, but few will be required for this course
•friend or protected class members•inline functions•const or static functions and variables•pure virtual functions virtual void Intersect(Ray&r, Hit &h) = 0;
•compiler directives•operator overloadingVec3f& operator+(Vec3f &a, Vec3f &b);