C++totural file


Published on

Published in: Devices & Hardware
  • Be the first to comment

  • Be the first to like this

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • about as simple as it gets – just get a feel for the syntax but you’ll have more complicated programs so you want to organize better first way to do that is by separating into multiple files
  • same program, but we’ve pulled c functions out we put it in a separate file … or rather, two separate files header file (you see on the right) declares the functions – that is, gives name, parameters, return type. but doesn’t include the implementation, which is done in a separate file. so when you code up the main program file, you can include the header file, and call the functions because in c++ you can only call functions that are declared.
  • so here’s the basic setup you write a bunch of cc files that implement functions (or objects, as we’ll see later) the headers include the declarations of functions (or objects) include the headers in the cc files if you’re using those functions compile to object files link all object files together get program make graphics
  • almost all c++ will make use of libraries bunch of convenient functions that you can use two libraries you’ll be using for almost assignments are glut (exp) and iostream (exp) so main here actually calls functions defined in both these libraries and here’s how we might compile
  • why? examples of purely functional programming languages… haskell, basic scheme…
  • why? examples of purely functional programming languages… haskell, basic scheme…
  • why? examples of purely functional programming languages… haskell, basic scheme…
  • why? examples of purely functional programming languages… haskell, basic scheme…
  • So why don’t we just use the first function?
  • So why don’t we just use the first function?
  • So why don’t we just use the first function?
  • C++totural file

    1. 1. Brought to you bywww.HalzWeek.com
    2. 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. 3.  Basic syntax Compiling your program Argument passing Dynamic memory Object-oriented programming
    4. 4. #include <iostream>  Includes function definitionsusing namespace std; for console input and output.float c(float x) { return x*x*x;  Function declaration.}  Function definition.int main() { float x;  Program starts here. cin >> x;  Local variable declaration. cout << c(x) << endl;  Console input. return 0;  Console output.}  Exit main function.
    5. 5. // This is main.cc // This is mymath.h#include <iostream> #ifndef MYMATH#include “mymath.h” #define MYMATHusing namespace std; float c(float x);int main() { float d(float x); // ...stuff...} #endif Functions are declared in m at h. h, but not defined. ym They are implemented separately in m at h. c c . ym
    6. 6. main.cc mymath.cc mydraw.cc ↓ ↓ ↓g++ -c main.cc g++ -c mymath.cc g++ -c mydraw.cc ↓ ↓ ↓ main.o mymath.o mydraw.o ↓ ↓ ↓ g++ -o myprogram main.o mathstuff.o drawstuff.o ↓ myprogram →
    7. 7. // This is main.cc#include <GL/glut.h>  Include OpenGL functions.#include <iostream>  Include standard IOusing namespace std; functions.  Long and tediousint main() { explanation. cout << “Hello!” << endl; glVertex3d(1,2,3); return 0;  Calls function from standard} IO.  Calls function from OpenGL.% g++ -c main.cc  Make object file.  Make executable, link GLUT.% g++ -o myprogram –lglut main.o  Execute program.% ./myprogram
    8. 8.  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.
    9. 9. Most assignments includeINCFLAGS = - I/afs/csail/group/graphics/courses/6.837/public/includ makef i l es , which describe eLINKFLAGS = -L/afs/csail/group/graphics/courses/6.837/public/lib CFLAGS -lglut -lvl = -g -Wall -ansi the files, dependencies, andCCSRCS = g++ = main.cc parse.cc curve.cc surf.cc camera.cc steps for compilation.OBJS = $(SRCS:.cc=.o)PROG = a1 You can just type mall: $(SRCS) $(PROG)$(PROG): $(OBJS) ake. $(CC) $(CFLAGS) $(OBJS) -o $@ $(LINKFLAGS).cc.o: So you don’t have to know $(CC) $(CFLAGS) $< -c -o $@ $(INCFLAGS) the stuff from the past fewdepend: makedepend $(INCFLAGS) -Y $(SRCS)clean: rm $(OBJS) $(PROG) slides.main.o: parse.h curve.h tuple.h But it’s nice to know.# ... LOTS MORE ...
    10. 10. #include <iostream>using namespace std;int main() { Arrays must have known int n; sizes at compile time. cin >> n; float f[n]; This doesn’t compile. for (int i=0; i<n; i++) f[i] = i; return 0;}
    11. 11. #include <iostream> Allocate the array duringusing namespace std; runtime using new.int main() { int n; cin >> n; No garbage collection, so float *f = new float[n]; you have to delete. for (int i=0; i<n; i++) f[i] = i; Dynamic memory is useful when you don’t delete [] f; return 0; know how much space} you need.
    12. 12. #include <iostream> STL vector is a resizable#include <vector>using namespace std; array with all dynamic memory handled for you.int main() { int n; cin >> n; STL has other cool stuff, vector<float> f(n); such as strings and sets. for (int i=0; i<n; i++) f[i] = i; If you can, use the STL return 0; and avoid dynamic} memory.
    13. 13. #include <iostream>#include <vector>using namespace std; An alternative method that does the same thing.int main() { int n; cin >> n; Methods are called with vector<float> f; the dot operator (same as for (int i=0; i<n; i++) Java). f.push_back(i); return 0; vector is poorly named,} it’s actually just an array.
    14. 14. float twice1(float x) {  This works as expected. return 2*x;}void twice2(float x) { x = 2*x;  This does nothing.}int main() { float x = 3; twice2(x); cout << x << endl;  The variable is return 0; unchanged.}
    15. 15. vector<float>twice(vector<float> x) { int n = x.size(); There is an incredible for (int i=0; i<n; i++) amount of overhead here. x[i] = 2*x[i]; return x;} This copies a huge arrayint main() { two times. It’s stupid. vector<float> y(9000000); y = twice(y); Maybe the compiler’s return 0; smart. Maybe not. Why} risk it?
    16. 16. void twice3(float *x) {  Pass pointer by value (*x) = 2*(*x); and} access data usingvoid twice4(float &x) { asterisk. x = 2*x;}  Pass by reference.int main() { float x = 3; twice3(&x); twice4(x); return 0;}  Address of variable.  The answer is 12.
    17. 17.  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.
    18. 18.  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.
    19. 19. Live Demo!
    20. 20.  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
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.