praktische aspekte der informatik · 2017. 4. 4. · final remarks •be present! otherwise, you...
TRANSCRIPT
![Page 1: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/1.jpg)
Praktische Aspekte
der InformatikMoritz Mühlhausen
Prof. Marcus Magnor
http://graphics.tu-bs.de/teaching/seminars/ss17/padi/
http://graphics.tu-bs.de/teaching/ss17/padi/ 1
![Page 2: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/2.jpg)
IntroductionWhat you need to know.
http://graphics.tu-bs.de/teaching/ss17/padi/ 2
![Page 3: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/3.jpg)
What?
Praktische Aspekte Der Informatik = PADI
You will learn…… how to program in C++.
… how to work with libraries.
… how to debug your code.
… how to optimize your code.
… how to organize your code.
… much more!
http://graphics.tu-bs.de/teaching/ss17/padi/ 3
![Page 4: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/4.jpg)
Why?
• If you’re a bachelor’s student…… you already know Java!
… you will have to do the SEP and the Teamprojekt.
… you will have to write a Bachelor’s thesis.
• If you’re a master’s student…… you may want to write a Projektarbeit.
… you will have to write a Master’s thesis.
• Eventually, all of you will work in the real world!
http://graphics.tu-bs.de/teaching/ss17/padi/ 4
![Page 5: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/5.jpg)
How?
• First Part: Weekly Assignments Brief talk (15-20 min).
Work on assignment in small groups.
Develop a proposal for a project.
• Second Part: Your Project Brief talk (15-20 min).
Work on your own project.
Give regular updates on your progress.
• Prototype: Present your current state 14.06. + 16.06.2017
• Final Week: Present your Project 05.07. + 07.07.2017
http://graphics.tu-bs.de/teaching/ss17/padi/ 5
![Page 6: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/6.jpg)
About your Project
• Your software project…
… can be anything you want (more or less)
… must be written in C++!
... should highlight the skills you have learned.
… must use at least one external library.
… must have a visual component.
• Your project will be graded on…
… function & quality.
… polish & presentation.
… whether you’re a Ba/Ma student.
• You alone are responsible for your project!
http://graphics.tu-bs.de/teaching/ss17/padi/ 6
![Page 7: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/7.jpg)
Example: Bachelor’s Project
TU Abalone
• Complete ruleset of
the Abalone game.
• Various game setups.
• Local multiplayer.
• Responsive user interface.
• Fancy animations!
• Save / Load / Undo / …
http://graphics.tu-bs.de/teaching/ss17/padi/ 7
![Page 8: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/8.jpg)
Example: Bachelor’s Project
Project SnackmiX
• Complete ruleset
of Chinese Chess.
• Movement Hints.
• Local multiplayer.
• Cool 3D graphics!
• Fancy animations!
• Special Effects!
http://graphics.tu-bs.de/teaching/ss17/padi/ 8
![Page 9: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/9.jpg)
Example: Master’s Project
Closer
• Jump & Run.
• Simple 2D graphics.
• Fancy design and animations.
• Levels loaded from custom format.
• Engine architecture from scratch.
• Various helpful debug views.
• Music and Sound Effects.
http://graphics.tu-bs.de/teaching/ss17/padi/ 9
![Page 10: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/10.jpg)
Final remarks
• Be present!
Otherwise, you might miss important announcements.
Most importantly, I cannot help you if you’re not here.
• A computer scientist must work in any environment!
You may do weekly assignments on your own computer.
Your project should run in the CIP-Pool
If it does not, then you must have a plausible excuse.
Challenge: Set up your project for multiple platforms.
http://graphics.tu-bs.de/teaching/ss17/padi/ 10
![Page 11: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/11.jpg)
Final remarks
• Do not underestimate the workload!
6 credits 180 hours
- 10+2 lectures 18 hours
162 hours!
PADI is a lot of work!
Pick a project you love!
http://graphics.tu-bs.de/teaching/ss17/padi/ 11
![Page 12: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/12.jpg)
C++ BasicsCompiler, Classes, Pointers,
Inheritance and more!
http://graphics.tu-bs.de/teaching/ss17/padi/ 12
![Page 13: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/13.jpg)
Further Reading
Warning!The following slides are meant to give you
a very superficial introduction to C++ basics.
If you want to learn more, have a look at:
http://www.cplusplus.com
http://www.cppreference.com
http://www.learncpp.com
http://graphics.tu-bs.de/teaching/ss17/padi/ 13
![Page 14: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/14.jpg)
Outline
Introduction
Building, Classes and Structs
Standard Template Library
Pointers and References
Inheritance
File I/O
Assignment
http://graphics.tu-bs.de/teaching/ss17/padi/ 14
![Page 15: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/15.jpg)
What is C++?
Benefits:
Very similar to Java (which you already know!)
Object oriented
Fast, powerful, and widely used
Many libraries and much code already available
A lot of tutorials and help.
Drawbacks:
Not very intuitive / fast to program
No Garbage Collector
Error prone
http://graphics.tu-bs.de/teaching/ss17/padi/ 15
![Page 16: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/16.jpg)
Hello World!
main.cpp
// Import I/O functionality
#include <iostream>
// This is the main entry point.
int main() {
// Print "Hello World!" and end the program
std::cout << "Hello World!" << std::endl;
return 0;
}
http://graphics.tu-bs.de/teaching/ss17/padi/ 16
![Page 17: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/17.jpg)
Outline
Introduction
Building, Classes and Structs
Standard Template Library
Pointers and References
Inheritance
File I/O
Assignment
http://graphics.tu-bs.de/teaching/ss17/padi/ 17
![Page 18: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/18.jpg)
Your first class (.h)
MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass {
public:
MyClass(); // Constructor
void doMagic(); // Some member function
private:
int counter; // Some member variable
};
#endif
http://graphics.tu-bs.de/teaching/ss17/padi/ 18
![Page 19: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/19.jpg)
Preprocessor, Compiler, and Linker
• When creating an executable, your code is…
… preprocessed (“glued” together)
… compiled (translated to be machine-readable)
… and linked (all the parts are connected)
• Different errors can occur at different stages
Not always easy to understand.
More on that next time.
http://graphics.tu-bs.de/teaching/ss17/padi/ 19
![Page 20: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/20.jpg)
Building your code
MyClass.h <iostream>
main.cpp MyClass.cpp
1. Preprocessor
2. Compiler
[main.o] [MyClass.o]
3. Linker
Hello
http://graphics.tu-bs.de/teaching/ss17/padi/ 20
![Page 21: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/21.jpg)
Your first class (.cpp)
MyClass.cpp
#include <iostream>
#include "MyClass.h"
// Namespace::functionName() { definition; }
MyClass::MyClass() { // Constructor
this->counter = 0;
}
void MyClass::doMagic() { // Some member function
std::cout << "MyClass::doMagic has been called"
<< ++this->counter << " times."
<< std::endl;
}
http://graphics.tu-bs.de/teaching/ss17/padi/ 21
![Page 22: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/22.jpg)
Your first class (in action!)
main.cpp
#include "MyClass.h"
int main() {
// Create an object of class MyClass
MyClass my_object;
for (int i = 0; i < 10; ++i)
my_object.doMagic(); // Do magic!
return 0;
}
http://graphics.tu-bs.de/teaching/ss17/padi/ 22
![Page 23: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/23.jpg)
Structs
Vector3D.h
#ifndef VECTOR3D_H
#define VECTOR3D_H
struct Vector3D {
float x,y,z; // public members
};
#endif
They work just like classes*!
*but they are commonly used for storing data.
http://graphics.tu-bs.de/teaching/ss17/padi/ 23
![Page 24: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/24.jpg)
Structs
Vector3D.h
#ifndef VECTOR3D_H
#define VECTOR3D_H
struct Vector3D {
Vector3D(float x = 0, float y = 0, float z = 0) {
this->x = x; this->y = y; this->z = z;
}
float x,y,z;
};
#endif
http://graphics.tu-bs.de/teaching/ss17/padi/ 24
![Page 25: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/25.jpg)
Structs
Vector3D.h
#ifndef VECTOR3D_H
#define VECTOR3D_H
struct Vector3D {
Vector3D(float x = 0, float y = 0, float z = 0) {
this->x = x; this->y = y; this->z = z;
}
float x,y,z;
};
Vector3D operator+(Vector3D a, Vector3D b) { // a+b
return Vector3D(a.x+b.x, a.y+b.y, a.z+b.z);
}
#endif
http://graphics.tu-bs.de/teaching/ss17/padi/ 25
![Page 26: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/26.jpg)
Outline
Introduction
Building, Classes and Structs
Standard Template Library
Pointers and References
Inheritance
File I/O
Assignment
http://graphics.tu-bs.de/teaching/ss17/padi/ 26
![Page 27: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/27.jpg)
Generic Data Structures
STL Vector
#include <vector>
[...]
// Create a vector and add some values
std::vector<float> values;
values.push_back(1.1);
values.push_back(2.3);
values.push_back(4.2);
std::cout << "Size of vector: "
<< values.size() << std::endl; // Size: 3
std::cout << "Value at index 1: "
<< values[1] << std::endl; // values[1]: 2.3
values.clear();
std::cout << "Size of vector: "
<< values.size() << std::endl; // Size: 0
http://graphics.tu-bs.de/teaching/ss17/padi/ 27
![Page 28: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/28.jpg)
Generic Data Structures
STL Vector
#include <vector>
#include "Vector3D.h"
[...]
// A vector of Vector3D objects
std::vector<Vector3D> vectors;
Vector3D v(1.1, 2.3, 4.2);
vectors.push_back(v);
vectors.push_back( Vector3D(1.1, 2.3, 4.2) );
http://graphics.tu-bs.de/teaching/ss17/padi/ 28
![Page 29: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/29.jpg)
Generic Data Structures
• Many generic containers already exist.
There are lists, sets, stacks, maps...
• There are algorithms, too!
You can count, find, merge, sort, replace…
• They are all fast and well documented.
http://www.cplusplus.com/reference/stl/
http://www.cplusplus.com/reference/algorithm/
http://graphics.tu-bs.de/teaching/ss17/padi/ 29
![Page 30: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/30.jpg)
Outline
Introduction
Building, Classes and Structs
Standard Template Library
Pointers and References
Inheritance
File I/O
Assignment
http://graphics.tu-bs.de/teaching/ss17/padi/ 30
![Page 31: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/31.jpg)
Pointers and References
• Easy to spot: & and *
Reference: float & value;
Pointer: float * value;
• References are easier to use.
There is no special syntax.
You cannot change where they point.
• Pointers give you more freedom.
You can change pointers at runtime.
You have to be careful where you point.
You have to clean up after yourself: new and delete
http://graphics.tu-bs.de/teaching/ss17/padi/ 31
![Page 32: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/32.jpg)
Pointers and References
float fooCopy(float float_copy) {
return ++float_copy;
}
float fooRef(float & float_reference) {
return ++float_reference;
}
float fooConstRef(float const& float_const_reference) {
return float_const_reference+1;
}
float fooPtr(float * float_pointer) {
return ++(*float_pointer);
}
float fooConstPtr(float const* float_const_pointer) {
return (*float_const_pointer)+1;
}
http://graphics.tu-bs.de/teaching/ss17/padi/ 32
![Page 33: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/33.jpg)
Prevent unwanted changes using const!
const usually applies to what’s left of it…
float const value=.5f; // const float
float const* ptr; // pointer to a const float
float *const ptr; // const pointer to a float
float const*const ptr; // const pointer to const float
… except when it doesn’t…
const float value=.5f; // float const value
const float * ptr; // float const* ptr;
const float *const ptr;// float const*const ptr;
http://graphics.tu-bs.de/teaching/ss17/padi/ 33
![Page 34: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/34.jpg)
HEAP and Stack
• By default, objects are allocated on the stack.
Automatically deleted at the end of their scope.
You can access memory addresses using pointers*
*but be careful with that!
• If you use new, objects are stored in the heap.
Manually clean up using delete.
Pointers themselves are often on the stack,
i.e. they are automatically cleaned up,
but the allocated object they point to is not!
If no valid pointer to an allocated object remains,
you have created a memory leak!
http://graphics.tu-bs.de/teaching/ss17/padi/ 34
![Page 35: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/35.jpg)
Memory allocation / deallocation
Explicitly allocate/deallocate memory:
Vector3D* my_ptr = new Vector3D(1.1, 2.3, 4.2);
// … do stuff …
delete my_ptr;
You can also allocate arrays:
// allocate 3 consecutive floats in memory
float* my_ptr = new float[3];
my_ptr[0] = 4.2f; // initialize your values…
[…]
float val = my_ptr[1]; // access the second float
float err = my_ptr[5]; // this might/should crash!
delete[] my_ptr; // deallocate the entire array
http://graphics.tu-bs.de/teaching/ss17/padi/ 35
![Page 36: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/36.jpg)
Pointer syntax
• Important Operators when working with pointers: Dereference using . and ->
Unfortunately, there’s also & and *.
Vector3D* vec = new Vector3D;
vec->x = 4.2f;
(*vec).x = 4.2f;
[…]
Vector3D other_vector;
vec = &other_vector;
[…]
float value = fooPtr(&vec->x);
http://graphics.tu-bs.de/teaching/ss17/padi/ 36
![Page 37: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/37.jpg)
Why use pointers?
• When you use pointers…
you can decide when your variables die.
you can control memory allocation.
You can share them—but beware!
• Helpful advice:
When passing anything bigger than a primitive,
pass a const&
When an argument variable is altered by a function,
pass a pointer
http://graphics.tu-bs.de/teaching/ss17/padi/ 37
![Page 38: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/38.jpg)
Outline
Introduction
Building, Classes and Structs
Standard Template Library
Pointers and References
Inheritance
File I/O
Assignment
http://graphics.tu-bs.de/teaching/ss17/padi/ 38
![Page 39: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/39.jpg)
Inheritance
• Classes may inherit from multiple other classes
• Classes can be abstract (just like in JAVA)
• You can define your own…
… Constructors,
… Destructors,
… and (assignment) operators
• Virtual classes allow method overriding
http://graphics.tu-bs.de/teaching/ss17/padi/ 39
![Page 40: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/40.jpg)
Inheritance
main.cpp
class A { // Parent class
virtual std::string foo() { return "I am A!"; }
};
class B : public A { // Child class
std::string foo() { return "I am B!"; }
};
int main() {
std::vector< A* > vec;
vec.push_back(new A);
vec.push_back(new B); // an A* pointer is also valid for B*
for (int i = 0; i < vec.size(); ++i)
std::cout << vec[i]->foo() << std::endl;
return 0;
}
http://graphics.tu-bs.de/teaching/ss17/padi/ 40
![Page 41: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/41.jpg)
Outline
Introduction
Building, Classes and Structs
Standard Template Library
Pointers and References
Inheritance
File I/O
Assignment
http://graphics.tu-bs.de/teaching/ss17/padi/ 41
![Page 42: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/42.jpg)
File Input
void MyClass::readFile(std::string const& filename) {
// Open the file for reading
std::ifstream fin(filename.c_str());
// Read the title (string)
fin >> this->title;
// Read the points (float)
int num_points;
fin >> num_points;
for (int i = 0; i < num_points; ++i) {
float value;
fin >> value;
this->values.push_back(value);
}
fin.close();
}
http://graphics.tu-bs.de/teaching/ss17/padi/ 42
![Page 43: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/43.jpg)
File Output
void MyClass::writeFile(std::string const& fname) const {
// Open the file for writing
std::ofstream fout(fname.c_str(), std::ios::out);
// Write the title and number of points
fout << this->title + "*1.5" << std::endl;
fout << this->values.size() << std::endl ;
// Write the point values (multiplied by 1.5)
for (int i = 0; i < values.size(); ++i)
fout << (values[i]*1.5f) << std::endl;
fout.close();
}
http://graphics.tu-bs.de/teaching/ss17/padi/ 43
![Page 44: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/44.jpg)
Outline
Introduction
Building, Classes and Structs
Standard Template Library
Pointers and References
Inheritance
File I/O
Assignment
http://graphics.tu-bs.de/teaching/ss17/padi/ 44
![Page 45: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/45.jpg)
Assignment
world.txt
block 0 -0.125 0 20 0.25 20 # x,y,z, width, height, depth
sphere 8 6 7 2 16 # x,y,z, radius, tesselation
sphere 8 8 7 1.5 16
block 8 3 7 0.5 6 0.5
block -6 2.5 2 6 5 8
block -4 3.5 -5 10 7 6
http://graphics.tu-bs.de/teaching/ss17/padi/ 45
![Page 46: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/46.jpg)
Assignment
Wavefront .obj file format
# List of vertices (nodes), with (x,y,z) coordinates
v 0.25 0.53 0.763 # vertex 1
v ... # vertex 2
v ...
# List of polygons (faces), with vertex indices
f 1 2 3 # triangle
f 2 3 4
f 2 5 6 4 # quad
f ...
http://graphics.tu-bs.de/teaching/ss17/padi/ 46
![Page 47: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/47.jpg)
Assignment
A. Look at the examples
Have a look at, compile, and understand all examples.
B. Hello World!
Implement a small C++ program that reads the world.txt file
and converts it to an .obj file.
Look at assignment_stub/main.cpp for more information.
Hint: If you’re stuck, the internet will help!
C. Have Fun!
How about adding more object types? (Cylinders, Pyramids, …)
How about adding rotation?
…
http://graphics.tu-bs.de/teaching/ss17/padi/ 47
![Page 48: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/48.jpg)
Outline
Introduction
Building, Classes and Structs
Standard Template Library
Pointers and References
Inheritance
File I/O
Assignment
http://graphics.tu-bs.de/teaching/ss17/padi/ 48
![Page 49: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/49.jpg)
Closing thoughts
• PADI Philosophy
Gap knowledge.
Practical skills that glue together different aspects of CS.
• Heterogeneous Audience
Some of you know nothing, some know a lot.
Adjust your ambitions for the final project.
Help each other!
• Improve your individual programming skills!
http://graphics.tu-bs.de/teaching/ss17/padi/ 49
![Page 50: Praktische Aspekte der Informatik · 2017. 4. 4. · Final remarks •Be present! Otherwise, you might miss important announcements. Most importantly, I cannot help you if you’re](https://reader035.vdocument.in/reader035/viewer/2022081617/60424897cd1940303678f472/html5/thumbnails/50.jpg)
Presentation
Wichtig!Die Termine für die abschließenden Kolloquien sind:
05.07.2017 13:15 Uhr
07.07.2017 13:15 Uhr
Ihr müsst PADI beim Prüfungsamt anmelden!
http://graphics.tu-bs.de/teaching/ss17/padi/ 50