a scenic tour of c++atlas.physics.arizona.edu/~kjohns/downloads/c++/scenictourc++.pdf · – get a...
TRANSCRIPT
![Page 1: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/1.jpg)
Dietrich Liko
A Scenic tour of C++
Dietrich Liko
![Page 2: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/2.jpg)
Dietrich Liko
A tour of the world ...
• We will visit many places
• We will stay only short
• You will get an overview
• If you want to know these places better, you will have to visit them yourself afterwards
![Page 3: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/3.jpg)
Dietrich Liko
The C++ programming language
• Was created by Bjarne Stroustrup
– You can visit him on
http://www.research.att.com/~bs/homepage.html
• You find also an audio file to pronounce his name
• Is better than C• Supports data-abstraction• Supports object-oriented programming• Supports generic programming
![Page 4: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/4.jpg)
Dietrich Liko
Stop 1 : Hello world
#include <iostream>
int main(int argc, const char** argv ) {
std::cout << “Hello World” << std::endl;
return 0;
}
![Page 5: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/5.jpg)
Dietrich Liko
Stop 2: Procedural programming
• This is what we well know from FORTRAN or C
#include <cmath>
double do_something(double a) {
double b = a * 2;return std::sqrt(b);
}
![Page 6: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/6.jpg)
Dietrich Liko
Build in data types
• float• double• int• long• short• char
int a;
int b = 5;
char c = ‘c’;
char name[] = “Dietrich”;
C++ allows to define your own data types. There is a number of prefabricated available like strings and complex numbers
string name = “Dietrich”;Better then C
![Page 7: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/7.jpg)
Dietrich Liko
Operators
Things in between variables
• assignment =• arithmetic + - * /• shortcut += -= *= /=• comparison == != < > >= <=
• increment ++ --
• more exotic ? & << >>
double a = d > 0 ? sqrt(d) : sqrt(-d);
a = a + 1;
++a;
![Page 8: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/8.jpg)
Dietrich Liko
How to pass arguments ?
• Pass by value – C
void do_it(double b) {
b = 4.0
}
double a = 5;
do_it(a);
void do_it(double * b) {
*b = 4.0
}
double a = 5;
do_it(&a);What happens to “a” ?
![Page 9: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/9.jpg)
Dietrich Liko
How to pass arguments cont.
• Pass by reference – FORTRAN
SUBROUTINE DO_IT(B)
REAL B
B = 4.0
END
PROGRAM TEST
REAL A
A = 5.
CALL DO_IT(A)
END
What happens to “a” ?
![Page 10: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/10.jpg)
Dietrich Liko
How to pass arguments cont.
• Pass by reference – C++
void do_it (double b &) {
b = 4.0;
}
double a = 5;
do_it(a);
void do_it (const double b &) {
b = 4.0;
}Illegal
![Page 11: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/11.jpg)
Dietrich Liko
• Pointer to a variable *
• Reference to a variable &
Pointers & References
double temperature = 38.0;
double * pTemp = &temperature;
*pTemp += 5.0;
38.0 temperature
0x0ABC026 *pTemp
void do_something(double b &) {
b += 5.0;
}
Better then C
![Page 12: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/12.jpg)
Dietrich Liko
Control structuresif ( a>5 ) {
……
} else {
……
}
while( a>5) {
……
}
switch a {case 5 :
……break;
case 3 :… …break;
default:… …
}
for (int i=0; i<100; ++i) {
……
}
![Page 13: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/13.jpg)
Dietrich Liko
Programming paradigm
• Decide which procedures you want• Use the best algorithms you can find
• Functions are used to create order
• Leads to structured programming
![Page 14: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/14.jpg)
Dietrich Liko
Stop 2: Data abstraction
• C++ allows us to make our own data types
struct Particle {
double xpos;
double ypos;
double zpos;
double xmom;
double ymom;
double zmom;
double mass;
}
![Page 15: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/15.jpg)
Dietrich Liko
But sometimes later ...
struct Particle {
double xpos;
double ypos;
double zpos;
double xmom;
double ymom;
double zmom;
double mass;
}
struct NewParticle {
double xpos;
double ypos;
double zpos;
double mom;
double theta;
double phi;
double mass;
}
If I want to know the energy ...
• energy = sqrt(p.mass*.p.mass + p.xmom*p.xmom + ….)
![Page 16: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/16.jpg)
Dietrich Liko
Better use classes
• Only public part visible to outside world• Obviously Interface design most important aspect• Dependencies are minimized
class Particle {
public:
void setMomentum(double x, double y,double z);
double energy();
private:
…whatever I prefer …
}
![Page 17: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/17.jpg)
Dietrich Liko
Abstraction level - Reality
Particle
boost
collide
decay
………..
More detail
Physical Properties• position
• momentum
• mass
• Apply transformations
• physics laws
![Page 18: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/18.jpg)
Dietrich Liko
Abstraction level - Program
Variables
Objects
More general
Functionality according to interface
Usual arithmetic
![Page 19: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/19.jpg)
Dietrich Liko
Stop 3: Classes and Objects
• A class is the definition– in C++ it is a real data type
• An object is an instance of a class– You can create as many instances as you like
void do_something(){
………
Particle p;
………
}
Particle * p = new Particle();
………
delete p;
Risk of memory leaks
![Page 20: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/20.jpg)
Dietrich Liko
Member Attributes
• Each object has its own set of variables associate to it
• Usually attributes are “private”
• Often a naming convention is used “m_name”• Attributes define the state of an object
• Static attributes exists only once
Invisibleto the world
![Page 21: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/21.jpg)
Dietrich Liko
Member Functions
• Also called “Methods”
• Usually public
• Provide functionality
• They act on an instance of a class
• They can change the state of the object
![Page 22: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/22.jpg)
Dietrich Liko
Constructor - Destructor
• Special Member Function
• Particle::Particle (constructor)– Called when the object is created– defines the initial state– allocate resources (open file, open window …)– allocate other objects
• Particle::~Particle (destructor)– cleanup– delete other objects
![Page 23: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/23.jpg)
Dietrich Liko
More exotic
• Copy constructor
– Particle newParticle = oldParticle;
• Assignment operator
– Particle p;– p = otherParticle;
![Page 24: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/24.jpg)
Dietrich Liko
And even more ...
• Complex numbers in C++• Not build in, but a feature added later on• Operators can be defined
– Operator overloading
complex a = complex(4.,5.);
complex b = a + 5.;
Somewhere it is defined that this means ...
b.re = a.re + 5.;
b.im = a.im;
![Page 25: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/25.jpg)
Dietrich Liko
Programming Paradigm
• Decide which types you want• Provide a full set of operations
• A step in a new direction for program organization
• But needs a bit more …
![Page 26: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/26.jpg)
Dietrich Liko
Stop 4: Object oriented programming
• Add some more ingredients
Inheritance
Polymorphism
Late Bindings
![Page 27: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/27.jpg)
Dietrich Liko
Define an Interface
class Particle {
virtual double energy() = 0;
virtual void boost(double x, double y, double z,double t) = 0;
………
}
Define what your object should do
Provide an implementation
![Page 28: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/28.jpg)
Dietrich Liko
Implementation
class MyParticle : public virtual Particle {
virtual double energy();
……
};
double MyParticle::energy() {
return …..
}
![Page 29: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/29.jpg)
Dietrich Liko
How to use ???
• I can write now a program in terms of “particles” and I do not need to know at all which particles are there
• As a matter of fact I can have a number particles, which are in truth MyParticles and YourParticles at the same time, and I do not know or care what they do to provide the answer
Particle * particle = new MyParticle();
…………
double energy = particle->energy();
![Page 30: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/30.jpg)
Dietrich Liko
Dynamic Bindings
• Other name for virtual methods• Only in the last moment it is known what is going to happen
• The programmer tells the object to do something• The object does it in its own specific way
boost
![Page 31: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/31.jpg)
Dietrich Liko
Messages between objects
TotalEnergy
Particle 1
Particle 2
Particle 3
energy
5.0
calculate
25.0
11.0
9.0
![Page 32: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/32.jpg)
Dietrich Liko
Just a different point of view
double TotalEnergy::calculate() {
double sum = 0;
for(int i=0;i<3;++i) {
sum += particle[i].energy();
}
return sum;
}
![Page 33: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/33.jpg)
Dietrich Liko
Inheritance tree
Particle
MyParticle
MyParticle1 MyParticle2 YourParticle
Sharedimplementation
![Page 34: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/34.jpg)
Dietrich Liko
In our case ...
Particle
RecParticle SimParticle GenParticle
![Page 35: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/35.jpg)
Dietrich Liko
Another Use
ThrustResult
I am just an interface
ThrustByMethodAcalculate_on
ThrustByMethodBcalculate_on
I do the work
![Page 36: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/36.jpg)
Dietrich Liko
Is-a Relation
Particleboostdecay
Spin1 Particleflip
class Spin1Particle : public Particle {
……
}
![Page 37: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/37.jpg)
Dietrich Liko
Has-a Relation
Particle
MomentumVector
class Particle {
MomentumVector mom;
}
![Page 38: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/38.jpg)
Dietrich Liko
Often difficult to decide
ThreeVector
FourVector
Has-it or Is-it ?
Hamlet,Prince of Denmark
![Page 39: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/39.jpg)
Dietrich Liko
Programming paradigm
• Decide which classes you want• Provide a full set of operation• Avoid being dependent on implementation
Program will be organized as interaction objects
![Page 40: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/40.jpg)
Dietrich Liko
UML
Particle
SpecialParticle
Booch
Rumbaugh
Jacbosen
Current way to
speak about classes
![Page 41: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/41.jpg)
Dietrich Liko
Design patterns
• Object Solutions
• very useful
• Solves the problems you did not have before you used objects
• You will use them every day
Gang of Four
• Gamma
• Helm
• Johnson
• Vlissides
![Page 42: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/42.jpg)
Dietrich Liko
Stop 5: Generic Programming
• A further idea …
• Often a similar operation can be applied to different data types
• An example:
– Lets try to implement complex numbers
![Page 43: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/43.jpg)
Dietrich Liko
Example complex numbers
• Polymorphism does not help, • A way how to automatically generate the source
class complex {
public:
float real() const;
float imaginary() const;
float mag() const;
private :
float re;
float im;
}
![Page 44: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/44.jpg)
Dietrich Liko
Complex numbers (generic)
templace <class T>
class complex<T> {
private :
T re;
T im;
}
complex<double> a;
complex<float> b;
• Practical
• Used for many libraries
![Page 45: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/45.jpg)
Dietrich Liko
Programming Paradigm
• Decide which algorithm you want• Parameterize them so that they work with a variety of data
types
• C++ libraries are written in that style
• Probably you will simply use the features provided for you for some time …
![Page 46: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/46.jpg)
Dietrich Liko
Stop 6: Standard Library
• Manly based generic programming
• example
– complex– string– streams– containers
![Page 47: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/47.jpg)
Dietrich Liko
Naming Conventions
• There are many (for each experiment different)• Taligent (used by root)
• Class Test• Method doSomething or do_something• Member attribute m_momentum• Cont MAX
• Other Rules: C++ FAQ’s, Books by Scott Mayer
![Page 48: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/48.jpg)
Dietrich Liko
Strings
• Truly dynamic strings• template usually hidden• Safer then c strings• Better then c strings• Many member functions
• No reason why still to use c strings
std::string name;
int length = name.size();
![Page 49: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/49.jpg)
Dietrich Liko
I/O Streams
• New I/O syntax• Modeled after UNIX pipes
• Fast, easy• But hard to make “nice” output
cout << “Hello World” << endl;
Particle p;
cout << p;
cout Basket
![Page 50: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/50.jpg)
Dietrich Liko
STL Containers
• Replacement of C arrays– Safer
• vector<double>
• list<particles>
Better then C
![Page 51: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/51.jpg)
Dietrich Liko
Iterator
• A possible way
• Another way (if [] is very expensive!)
vector<int> array;
int sum = 0;for(int i = 0;i<array.size();++i) {
sum += array[i];}
int sum = 0;for (vector<int>::iterator elem = array.begin();
elem != array.end();++elem ) {sum += *elem;
}
![Page 52: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/52.jpg)
Dietrich Liko
Stop 7: Other Libraries
• CLHEP for Physics Quantities
– Vectors, LorentzVectors– Geometry & Transformations– SI Units– Random Numbers
• many distributions
– Obsolete packages• strings, list etc.
This you will have to learn in any case
![Page 53: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/53.jpg)
Dietrich Liko
GEANT4
• Detector simulation– geometry– particles– physics process
• very large toolkit• experiments are starting to use it
– Hard to start (no CERN software!)– But quite easy to use !
![Page 54: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/54.jpg)
Dietrich Liko
PYTHIA 7
• Still in development
• Replacement for PHYTHIA 6 event generator
![Page 55: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/55.jpg)
Dietrich Liko
Anaphe
• A number of packages defining the computing at CERN
• CLHEP (foundation)• GEANT4 (detector simulation)• HTL (Histograms)• Gemini (Fitting)• OpenInventor/OpenGL (Graphics)• Objectivity/DB (Persistency)
![Page 56: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/56.jpg)
Dietrich Liko
How to continue the journey
• Get started – Follow the Training session (this afternoon)– Get a good book (it’s a great Xmas present!)– Attend the CERN C++ course (in few weeks)– Try a smaller project
• Get an expert– Trough it away and program it again (several times)– Get other books (FAQ, Efficient C++) (Easter presents?)– Study how other person solve the problem– Attend the OO Design course (in some months)
![Page 57: A Scenic tour of C++atlas.physics.arizona.edu/~kjohns/downloads/c++/ScenicTourC++.pdf · – Get a good book (it’s a great Xmas present!) – Attend the CERN C++ course (in few](https://reader035.vdocument.in/reader035/viewer/2022080719/5f796a91a97cd033cd1c745c/html5/thumbnails/57.jpg)
Dietrich Liko
A Final Warning
The difference between C and C++
C lets you shoot yourself in the foot rather easily.
C++ allows you to blow your whole leg off.
Have fun!