Lecture 11 12 C

background image


LECTURE 11 and 12

Introduction to programming in C++ language


See examples

ex_??.cpp

taken from book

Jerzy Grębosz „Symfonia C++”


Tomasz Zieliński

background image

WHAT IS NEW IN C++?

(1)

C++

=

C

plus

classes (object-oriented operations and functions)

VISUAL C++

=

C++

plus

classes of graphical objects / functions

C#

=

C++

plus

classes of network objects / functions

MATLAB

=

C++

plus

classes of mathematical objects (matrices)

class

= data structures + functions acting on them

inheritance

= one class can be a part of other “bigger” classes

B

A

B

A

C

B

single

inheritance

multiple

inheritance

encapsulation

private

- variables available only for

inner

functions of the class

protected

- variables available also for

derivative

classes

public

- variables available for all classes

background image

WHAT IS NEW IN C++?

(2)

polymorphism

(object-orientation, multi-sense/meaning, virtuality)

virtual functions

their behavior depends on which types of objects

they are executed (e.g. function „play_a_sound” in ex_24.cpp)

„overloading” function names

a few different functions, having the

same name, are recognized (differentiated) by different order of
types (char, int, long, …) of arguments that are sent to them

„ overloading” arithmetic operators

(+,

, *, /)

each operator, e.g. „+”, can have a lot of meanings that depend
on its arguments (what is on the left and on the right of it)
e.g. mathematical operations on complex numbers
mathematical operations on vectors and matrices

templates

= mechanism for defining new functions and classes; only

different types of arguments are used or new components are
added

exceptions

(try, catch)

= mechansm for reaction on critical situation

(risky and dangerous for program execution)

background image

WHAT IS NEW IN C++?

(3)

Less important changes:

1) New functions for input (

cin >>

) and output (

cout <<

) in

<iostream.h>

.

2) Possibility of variables declaration at any place, not only in the program

beginning (

on-line

declaration).

3) New variables types (used also in C version

ISO/ANSI C99 (1999)

):

const

after initialization changing variable value is impossible

register

storing a variable in processor’s registers is suggested

volatile

read from memory during any usage

4)

Inline

functions: short functions which code is repeated (embedded)

many times in a program. Thanks to this the program is executed faster.

5) Passing (sending) values of variables to the functions by reference (

&ref

).

6) Dynamic memory allocation using functions

new

and

delete

.

background image

NOTIONS (CONCEPTIONS) ASSOCIATED WITH

CLASSES

constructor

function having the same name as the class. It is used for
initialization of class objects (variables) and return nothing

- openly (publicly) called

- automatic & copying

destructor

function which name is negated name of the class that is
used for removing (“killing”) class objects (variables)

friend

GLOBAL function being a friend of a few classes

and having access to all their objects (variables)

background image

EXAMPLES (1)

1)

cin >>, cout <<

int

i;

float

f;

cout <<

”Give integer number: ”;

cout <<

”Give floating-point: ”;

cin >>

i;

cin >>

f;

2) declaration of

on-line

variable

int i, j;
i=5; j=i+10;

float f;

f=1.2345;
for(

int

k=0; k<10; k++) {...}

3) declaration of variables:

const, register, volatile

const

int

max =10;

register

int i,

j;

valatile

int

AC;

background image

EXAMPLES (2)

4)

inline

function

float gain = 10; offset = 5;

inline

float scale( float x)

{ return( gain *(x-offset) ); }

5) value of function argument sent by reference (

&ref

)

int myfunction( int val, int

&ref

)

{ val = 0; ref = 0; }

main()
{

int a=1,

b=2

, c;

c = myfunction( a,

b

);

cout << a << ”\n” << b;

// ”\n” = endl = new line

}

background image

EXAMPLES (3)


6) dynamic memory allocation:

new

,

delete

float *pa, *ptab;
pa =

new

float;

ptab =

new

float[100];

*pa = 1.2; *ptab = 3.4; ptab[ 99 ] = 5.6;

delete

pa;

delete

[] ptab;

7) overloading function names

void

display

( int i);

void

display

( float f);

void

display

( int i, float f);

void

display

( float f, int i);

background image

// EXAMPLE 7 –

example of class & its objects definition

// Jerzy Grębosz „Symfonia C++”, pp. 271

#include <iostream.h>
#include <string.h>

//====== definition of the

class

having name

person

==========//

class person

{

char surname[ 80 ] ;
int age ;

public :

void store(char *text, int years) ;

// <-- function NOT inline

//---------------------------------------------------

// only declaration

void display()

// <-- function inline

{

// at once definition

cout << "\t" << surname << ", age: " << age << endl ;
}

} ;

//==== definition of the function store() for the class person ====//

void

person::store

(char *text, int years)

// definition of the class

{

// function; NOT inline

strcpy(surname, text) ;

// classname::functionname

age = years ;

}

// ================================================== //
void main()
{

person

student1, student2, professor, pilot ;

// declaration of objects

//

of

the

class

person

cout << "Object of the class person has size: " << sizeof(person) <<
endl;
professor.store( "Albert Einstein", 55 );
student1.store( "John Smith", 21 );
student2.store( "Ann Walker", 23 );
pilot.store( "Neil Armstrong", 37 );

background image

cout << "\nChecking after objects initialization: \n";

cout << "Data from object professor\n";
professor.display();
cout << "Data from object student1\n";
student1.display();
cout << "Data from object student2\n";
student2.display();
cout << "Data from object pilot\n";
pilot.display();

cout << "Hey, you will be a pilot !\n" ;

//

cout << "What is your name? " ;

// Give your family name:

char buffer[80] ;

// declaration on-line

cin >> buffer ;

// reading

cout << "How old are you? " ;

// Give your age:

int

howmany

;

// declaration on-line

cin >> howmany ;

// reading


pilot.store( buffer , howmany
);

// new pilot


cout << "Now professor and pilot are : \n ";
professor.display();
pilot.display();

}

background image

// EXAMPLE 8a –

class constructor

// function that initializes values of variables of class objects
// it has the same name as the class and return nothing
// Jerzy Grębosz „Symfonia C++”, pp. 282

#include <string.h>

// since we are using strcpy()

#include <iostream.h>

// as usual: cin >>, cout <<


// ================= class definition =================== //

class number

{

int value ;
char description[40] ;

public:

// auxiliary functions ------------------------
// constructor – only declaration

# function initializing

// has the same name as the class,

# values of variables

// returns nothing

# of the class

number

( int howmany, char *text ) ;


// additional component functions ------

void store(int howmany)

{ value = howmany ; report() ; }


// -------------------------------------------------

int givevalue()

{ return value ; }


// -------------------------------------------------

void report()

{ cout << description << value << endl ; }

} ;

// ============= constructor definition =================== //

number::number

(int howmany, char *text)

// classname::classname

{

//

value = howmany;

// put sent values into class

strcpy( description, text );

// variables: value, description

}

background image

void main()
{

// initialization:

number

airplane=

number

( 1200, "Actual altitude");

// full verion

number

atmosphere=

number

( 920, "Atmospheric Pressure");

// full v.

number

course( 63, "Flight direction");

// short version

// initial report

airplane.report() ;

// execute function report() on

course.report();

// consecutive objects of the class

atmosphere.report();

// number


cout << "\n Flight correction !!!\n\n" ;
airplane.store( 1201 );

// function store() performed on

// the airplane

// change course by 3 degrees

// functions „givevalue”

course.store( course.givevalue() + 3) ;

// and ”store” performed

// on course

// pressure is falling down

atmosphere.store( 919 ) ;

// function store() on atmosphere


}

background image

// EXAMPLE 13 –

GLOBAL function being a friend of a few classes

// has access to all components of these classes (even private)
// Jerzy Grębosz „Symfonia C++”, pp. 306

#include <iostream.h>
#include <string.h>

class square ;

// declaration announcing the second class

// ==================== first class ======================//

class point

{

int x, y ;
char name[30] ;

public :

point

( int a, int b, char *text ) ;

void kick( int n, int m ) { x += n ; y += m ; }

// function

friend int referee

( point &p, square &s ) ;

// <-- being a friend of

} ;

// class point

// ================= second class =====================//

class square

{

int x, y, size;
char name[30] ;

public :

square

( int a, int b, int dd, char *text ) ;

// function

friend int referee

( point &p, square &s ) ;

// <-- being a friend of

} ;

// class square

// ============= constructor of the class point =============//

point::point

( int a, int b, char *text)

{ x = a ; y = b ;
strcpy(name, text) ;
}

// ============ constructor of the class square ============//

square::square

( int a, int b, int dd, char *text)

{ x = a ; y = b ; size = dd ;
strcpy(name, text) ;
}

background image

// this is a friend function of both classes: point and square ==//
int

referee

(point &pt, square &sq)

{

if ( (pt.x >= sq.x) && (pt.x <= (sq.x + sq.size) )

&&
(pt.y >= sq.y) && (pt.y <= (sq.y + sq.size) ) )

{

cout << pt.name << " is on the " << sq.name << endl ;
return 1 ;

}

else

{

cout << "OUT!" << pt.name << " is out of " << sq.name << endl;
return 0 ;

}

}
//====================================================//
void main()
{

square ffield( 10, 10, 40, "court") ;

// football field of class square

point ball( 20, 20, "ball");

// ball of class point


referee

( ball, ffield );

// where is the ball ?

cout << "\nWe are kicking the ball !\n" ;
while(

referee

( ball, ffield ) ) /

/ is the ball on the football field?

{
ball.kick( 20, 20);

// we are kicking the ball

}

}

background image

// EXAMPLE 18 –

overloading arithmetic operators

//

add and multiply complex number using operators

"+", „*”

// Jerzy Grębosz „Symfonia C++”, pp. 422

#include <iostream.h>

// ================================================ //

class complex

{

public :

float re ;
float im ;

complex

( float r = 0, float i = 0): re(r), im(i)

// initialization list:

{ }

// re = r; im = i;

void display()
{ cout << "Complex number: (" << re << ", " << im << ") \n" ; }

} ;

// overloading operator ”+” =========================== //
complex

operator+

( complex a, complex b )

{

complex sum( 0, 0 ) ;
sum.re = a.re + b.re ;
sum.im = a.im + b.im ;
return sum ;

}
// add complex numbers using old-fashion function ====== //
complex

add

( complex a, complex b )

{

complex sum( 0, 0 ) ;
sum.re = a.re + b.re ;
sum.im = a.im + b.im;
return sum;

}
// overloading operator ”*” ========================= //
complex

operator*(

complex a, complex b )

{

complex mult( 0, 0 ) ;
mult.re = a.re * b.re - a.im * b.im ;
mult.im = a.re * b.im + a.im * b.re ;
return mult ;

}

background image


// ================================================= //

void main()
{

complex z1( 6, -2 ), z2( -1, 3 ), z3 ;

// definition - initialization


cout << "\n Addition of complex numbers (6,-2) + (-1,3) = \n" ;

z3 = z1 + z2;

// add – overloaded operator +

z3.display();

// show result

z3 = add( z1, z2 );

// add using function

z3.display();

// show result


cout << "\n Multiplication of complex numbers (6,-2) + (-1,3) = \n" ;

z3 = z1 * z2;

// multiply - overloaded operator *

z3.display();

// show result

}

background image

// EXAMPLE 19 -

overloading arithmetic operators

//

multiply a vector by a number using "*"

// Jerzy Grębosz „Symfonia C++”, pp. 438

//===================================================//

class vector

{

public :

float x, y, z ;

// constructor --- initialization list: x=xp, y=yp, z=zp

vector( float xp = 0, float yp = 0, float zp = 0 ): x(xp), y(yp), z(zp)
{ /* empty body */ } ;

} ;
//===================================================//
vector

operator*

( vector vin, float number )

{
vector vout ;

vout.x = vin.x * number ;
vout.y = vin.y * number ;
vout.z = vin.z * number ;
return vout ;

}
//=================================================//
void display( vector vin )

// definition of auxiliary function

{ cout << " " << vin.x
<< " " << vin.y

<< " " << vin.z << endl << endl ;

}


//=================================================//
void main()
{

vector a( 1, 2, 3 ), b( -1.1, -2.2, 3.3 ), c ;

cout << " [ 1, 2, 3 ] * 3.5 =" ;
c = a * 3.5 ;

// multiply vector a by number 3.5

display(c) ;

cout << " [ -1.1, -2.2, 3.3 ] * -2.0 =" ;
c = b * -2.0 ;

// multiply vector b by number –2.0

display(c) ;

}

background image

// EXAMPLE 23 –

multiple inheritance

//

one class is derived (deduced) from a few classes

//

and inherits their data structures and functions

// Jerzy Grębosz „Symfonia C++”, pp. 525

//////////////////////////////////////////////////////////////////////////////////////////// first class

class car

{

protected :

int a ;

public:

car(int

arg)

:

a(arg)

// a = arg

{ cout << "Car constructor \n" ; } ;

} ;

////////////////////////////////////////////////////////////////////////////////////////// second class

class boat

{

protected :

int b ;

public:

boat(int x) : b(x)

// b=x

{ cout << "Boat constructor \n" ; }

} ;

///////////////////////////////////// derived class that inherits from two classes

class amphibiancar : public car, public boat

{
public :

amphibiancar() : car(1991) , boat(4)

// initialization list

{ cout << "Amphibiancar constructor \n" ; }

void display_components()

{ cout << "Inherited components \n a = " << a
<< ", b = " << b << endl ; }

} ;

/////////////////////////////////////////////////////////////////////////////////////// main program
void main()
{

amphibiancar xxx ;
xxx.display_components();

}

background image

// EXAMPLE 24 –

virtual functions

// Derived classes have functions with the same names as the “mother”
// (basal) class.
// If we call such functions with an address of derived object,
// then appropriate function of the derived class will be chosen.

// Jerzy Grębosz „Symfonia C++”, pp. 553

/* ----------------- file : e_24.h ---------------- */

#include <iostream.h>

//-------------------------------------------------------
class

instrument

{

// basic class

int price ;
public:
void virtual

play_sound

()

// <-- virtual function

{ cout << " Undetermind bang ! \n" ;

}

} ;
//-------------------------------------------------------
class

trumpet

: public

instrument

{

// derived class no 1

public:
void

play_sound

()

// <-- the same function

{ cout << " Tra-ta-ta ! \n" ; }

//

name

} ;
//-------------------------------------------------------
class

piano

: public

instrument

{

// derived class no 2

public:
void

play_sound

()

// <-- the same function

{ cout << " Pilm-plim-plim ! \n" ; }

//

name

} ;
//-------------------------------------------------------
class

drum

: public

instrument

{

// derived class no 3

public:
void

play_sound

()

// <-- the same function

{ cout << " Bum-bum-bum ! \n" ; }

//

name

} ;
//-------------------------------------------------------

background image

#include

"e_24.h"

// our file


void musician(

instrument

&given_instrument) ;

// function declaration


//--------------------------------------------------------------------------------------------

void main()
{

instrument

any_instrument

;

// object of the basic class

trumpet

golden_trumpet

;

// object of the derived class 1

piano

steinway_giseli

;

// object of the derived class 2

drum

my_drum

;

// object of the derived class 3

cout << "Ordinary call of component functions for different objects \n"

"- till now nothing special \n" ;

any_instrument.

play_sound

() ;

golden_trumpet.

play_sound

() ;

steinway_giseli.

play_sound

() ;

my_drum.

play_sound

() ;

cout << "And know we executed the function on object \n"

"depicted by pointer to an instrument \n" ;

instrument

*ptrinstr ;

// pointer declaration

ptrinstr = &

any_instrument

;

// pointer initialization (setting)

ptrinstr ->

play_sound

() ;

// play a sound

cout << "Revelation is observed when we depict with \n”

„the instrument pointer to objects derived from \n"

"the class instrument \n";

ptrinstr = &

golden_trumpet

;

ptrinstr ->

play_sound

() ;

ptrinstr = &

steinway_giseli

;

ptrinstr ->

play_sound

() ;

ptrinstr = &my_drum ;
ptrinstr->

play_sound

() ;

background image

cout << "The similar behavior is observed also for references \n" ;

musician(

any_instrument

);

musician(

golden_trumpet

);

musician(

steinway_giseli

) ;

musician(

my_drum

) ;

}

//--------------------------------------------------------------------------------------------

void musician(

instrument

&given_instrument )

{
given_instrument.

give_sound

();

}


Wyszukiwarka

Podobne podstrony:
Summary of lectures 11 12
CALC1 L 11 12 Differenial Equations
zaaw wyk ad5a 11 12
budzet ue 11 12
11 12 w2010 11 proteomika
foniatra 11 12
2003 11 12
Kształcenie literackie& 11 12 r
TRB W10 11 12 02 montaż?
Wyklad 3 11 12
Źródła informacji 11 12
10,11,12
sylabus neurobiologia 11 12 v 1
W 6 13 11 12
06 11 12 rachunek kosztów
wykłady do 11 12 13
EM U A wyk 11 12
dodatkowe1 analiza 11 12 2 sem Nieznany

więcej podobnych podstron