Professional Documents
Culture Documents
Εισαγωγή
13η
Αναφορές(References)
14η Inheritance
15η Polymorphism
1 Εισαγωγή
Ασκήσεις πάνω σε δομικά στοιχεία της γλώσσας
Τελεστές ++ και –
/*
Εκφώνηση: Να γραφεί πηγαίος κώδικας, ο
1
οποίος να δέχεται από το πληκτρολόγιο δύο
ακέραιους αριθμούς x και y. Στη συνέχεια να
εμφανίζει τον αριθμό x και τους δύο επόμενους x +
1, x + 2 σε μια γραμμή και τους αριθμούς y, y + 5 ,
y + 10 , στην επόμενη γραμμή. Ο πηγαίος κώδικας
να περιέχει εντολές με τον τελεστή αύξησης και
σύνθετες εντολές καταχώρησης.
*/
#include <iostream>
using namespace std;
int main()
{
int x,y;
int a,b;
a = y;
y += 5;
b = y;
y += 5;
cout << "Oi arithmoi y, y+5, y+10 einai \n" << a <<","<< b <<","<< y;
return 0;
}
2 Συναρτήσεις
/*
Υπολογισμός αριθμητικής παράστασης με χρήση συναρτήσεων pow(), sqrt()
*/
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double x, y, z;
2
cout << "The value of x to the "<<endl;
cout << "power of square root of y is"<<endl;
cout << z<<endl;
return 0;
}
/*
Υπολογισμός εμβαδού κύκλου και όγκου με χρήση καθολικής μεταβλητής, ΠΙ, 2
συναρτήσεων.
*/
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.14159; //Καθολική μεταβλητή
// Dilosi synartiseon
double area (double radius);
double volume (double radius);
int main()
{
double radius, area_of_cycle, volume_of_sphere;
//Εισαγωγή ακτίνας
cout << "Enter the radius\n"<<endl;
cin >> radius;
//Κλήση συναρτήσεων
area_of_cycle = area(radius);
volume_of_sphere = volume(radius);
//Έξοδος αποτελεσμάτων
cout<<"Area of cycle = "<< area_of_cycle << " square centimetres"<<endl;
cout<<"Volume of sphere = "<<volume_of_sphere << "cubic centimetres"<<endl;
return 0;
}
//definitions of functions
double area (double radius)
{
return (PI * pow(radius, 2) );
}
3
3 Αντικειμενοστραφής Προγραμματισμός
Κλάσεις
/*
Χρήση του this
*/
#include <iostream>
using namespace std;
class Test
{
public:
Test(int a);
void print();
private:
int x;
};
/*Ορισμός μεθόδου Test με βάση την κλάση Test*/
Test::Test(int a)
{
x = a;
}
int main()
{
Test testObject(12); //Ορισμός αντικειμένου με πέρασμα τιμής
testObject.print();
return 0;
}
4 Συναρτήσεις 2
Παράμετροι με πέρασμα τιμής
#include <iostream>
using namespace std;
float average(int x1, int x2);
4
int main()
{
int a=6,b=10;
cout<<average(a,b);
}
int main()
{
int a=5, b=7;
cout << "Before swap\n" << "a = " << a << " b = " << b << '\n';
swap(a, b);
cout << "After swap\n" << "a = " << a << " b = " << b << '\n';
return 0;
}
/* Παρατηρήστε πως γίνεται η αλλαγή τιμών μεταξύ των μεταβλητών ώστε να μην
χαθούν οι τιμές*/
void swap(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
Υπερφόρτωση overload
/*
Υπολογισμός μέσης τιμής βάση παραμέτρου b. Χρήση 2 συναρτήσεων με το ίδιο όνομα.
*/
5
#include <iostream>
#include <cmath>
using namespace std;
//Overloaded functions
double ave (double n1, double n2);
double ave (double n1, double n2, double n3);
int main()
{
bool b;
double x;
//Functions
double ave (double n1, double n2)
{
return ((n1+n2)/2.0);
}
6
int main()
{
animal dog1, dog2, chicken, cat1;
dog1.weight = 15;
dog2.weight = 37;
chicken.weight = 3;
dog1.feet = 4;
dog2.feet = 4;
chicken.feet = 2;
cout << "The weight of dog1 is " << dog1.weight << "\n";
cout << "The weight of dog2 is " << dog2.weight << "\n";
cout << "The weight of chicken is " << chicken.weight << "\n";
return 0;
}
int main()
{
//Declare today to be object of class Date
Date today(1,9,2016);
cout << "This program was written on ";
today.print();
cout << "This program was modified on ";
today.set(5,10,2016);
today.print();
return 0;
7
}
//Methods declaration
Date::Date(int d, int m, int y)
{
// Date constructor function definition
if(d>0 && d<31)
day = d;
if(m>0 && m<13)
month = m;
if(y>0)
year =y;
}
void Date::print()
{
cout << day << "-" << month << "-" << year << endl;
}
8
cost=c;
}
void showpart() //εμφϊνιςη δεδομϋνων
{
cout<< "\n Montelo " << modelnumber;
cout<< ", antallaktiko " << partnumber;
cout<< " , kostos " << cost << " euro";
}
};
int main()
{
part part1; //Ορισμός αντικειμένων
part1.setpart (6244, 373, 217.55); //Κλήση συνάρτησης-μέλους
part1.showpart ();
return 0;
}
6 Κλάσεις
/*
Ορισμός κλάσης.
*/
#include <iostream>
using namespace std;
class Point
{
public:
Point(); //constructor
void setPoint(int a,int b); //καθορισμός συντεταγμένων
void printPoint(); //εκτύπωση συντεταγμένων
private:
int x;
int y;
};
9
void Point::printPoint()
{
cout<<x<<" "<<y<<"\n";
}
int main()
{
Point p;
p.setPoint(5,10);
p.printPoint();
return 0;
}
1.
class Mailbox {
private:
void add(Message);
Message g _ ();
et_current();
void delete_current();
public:
//…. properties
};
2.
class Mailbox {
private:
//…. properties
public:
void add(Message);
Message g _ ();
et_current();
void delete_current();
};
10
*/
#include <iostream>
using namespace std;
int main()
{
float aktina,emvadon;
if (emvadon ==0)
cout<<"Den yparxei tetoio emvadon \n";
else
cout<<"Apodekth timh gia emvadon \n";
}
int main()
{
double price, bill;
int number;
return 0;
}
11
double total_cost(int number_par, double price_par)
{
const double TAX_RATE = 0.05; //5% sales tax
double subtotal;
subtotal = price_par * number_par;
return (subtotal + subtotal*TAX_RATE);
}
int main()
{
int number;
cout << "Poses fores theleis na sou po Hello? ";
cin >> number;
while (number>0)
{
cout << "Hello ";
number = number - 1; // ή number --;
}
cout << endl;
//return 0;
}
Δομή do while
/*
Εκφώνηση: Να αναπτυχθεί πρόγραμμα, το οποίο να τυπώνει στην
οθόνη την έκφραση Hello. Κατόπιν ο χρήστης μετά
από κατάλληλο μήνυμα να εισάγει y ή Y, αν θέλει να
ξανατυπωθεί σε νέα γραμμή πάλι η ίδια φράση. Αν
πληκτρολογηθεί οτιδήποτε άλλο, το πρόγραμμα να
τελειώνει αφού πρώτα τυπώσει στην οθόνη τη λέξη
12
Good-Bye
*/
#include <iostream>
int main()
{
char ans;
do{
cout << "Hello\n";
cout << "Do you want another greeting?\n" << "Press y for yes, n for
no,\n" << "and then press return: ";
cin >> ans;
} while (ans == 'y' || ans == 'Y');
return 0;
}
int main()
{
int a, max, i, N;
cout << "How many numbers will you insert?";
cin >> N;
max = -32768;
i=1;
while ( i <= N )
{
cout << "Write the number " << i << ": ";
cin>>a; //Διάβασε αριθμό
if ( a > max ) max = a; //Καταχώρησε τον αριθμό εάν > max
i++; //Αύξηση μετρητή
}
cout << "The max = " << max;
13
}
Δομή for
/*
Εκφώνηση: Να γραφεί πρόγραμμα το οποίο να δέχεται έναν ακέραιο θετικό αριθμό,
ας πούμε κ, από το πληκτρολόγιο. Στη συνέχεια να υπολογίζει το άθροισμα 1 + 2 +
+ κ και να το εμφανίζει στην οθόνη μετά από κατάλληλο μήνυμα.
*/
#include <iostream>
int main()
{
int k, sum = 0;
cout << "Enter a positive number:\n";
cin >> k;
return 0;
}
Δομή if
/*
Εκφώνηση: Να γραφεί πρόγραμμα για τον υπολογισμό του φόρου
εισοδήματος. Το πρόγραμμα να δέχεται τα έσοδα από το
πληκτρολόγιο μετά από κατάλληλο μήνυμα και να εμφανίζει στην
οθόνη το φόρο με κατάλληλο μήνυμα. Ο φόρος υπολογίζεται ως
εξής: Για το εισόδημα που είναι μικρότερο ή ίσο των 10.000 Euro
δεν πληρώνεται φόρος. Για το εισόδημα μεγαλύτερο των 10.000
Euro και μικρότερο ή ίσο των 20.000 Euro ο φόρος είναι 5% και
για το ποσό που είναι μεγαλύτερο των 20.000 Euro ο φόρος είναι
10%.
*/
#include <iostream>
int main()
{
int esoda;
double foros;
14
cout << "Pliktrologise ta esoda : ";
cin >> esoda;
cout << "O foros einai " << foros << " Euro";
return 0;
}
Δομή switch
/*
Να γραφεί πρόγραμμα στη C++,
το οποίο να δέχεται από το πληκτρολόγιο τη
βαθμολογία A, B, C, D, E ενός φοιτητή και μετά να
του απαντάει (στην οθόνη) με τα παρακάτω
μηνύματα: Αν ο βαθμός είναι A, B, C, να γράφεται
αντίστοιχα η λέξη arista, poli kala και kala. Αν ο
βαθμός είναι D ή E να γράφεται η λέξη aporriptesai.
Σε κάθε άλλη περίπτωση να τυπώνεται το μήνυμα
Autos den einai vathmos mathimatos.
*/
#include <iostream>
int main()
{
char grade;
cout << "Dose to bathmo toy mathimatos kai patise to Enter:";
cin >> grade;
switch (grade)
{
case 'A':
case 'a':
cout << "arista\n";
break;
15
case 'B':
cout << "poli kala\n";
break;
case 'C':
cout << "kala\n";
break;
case 'D':
cout << "aporriptesai\n";
break;
case 'E':
cout << "aporriptesai\n";
break;
default:
cout <<"Aytos den einai vathmos mathimatos.\n";
}
return 0;
}
/*
Μια επιχείρηση, που πουλάει ένα εμπόρευμα
σε χονδρική ή λιανική τιμή, θέλει να αναπτύξει ένα πρόγραμμα
για τη χρέωση των πελατών της. Όταν η πώληση είναι χονδρική
ο πελάτης δεν πληρώνει ΦΠΑ, ενώ όταν είναι λιανική πληρώνει
5% ΦΠΑ. Ο λογιστής της επιχείρησης θα πληκτρολογεί W ή w,
αν πρόκειται για χονδρική και R ή r, αν πρόκειται για λιανική
πώληση. Θα πληκτρολογεί επίσης τα τεμάχια που αγοράζει ο
πελάτης καθώς και την τιμή του τεμαχίου. Η χρέωση θα
εμφανίζεται στην οθόνη. Να γραφεί το πρόγραμμα έτσι ώστε οι
εισαγωγές δεδομένων από το πληκτρολόγιο και οι εμφανίσεις
αριθμών στην οθόνη να επενδύονται με κατάλληλα μηνύματα.
Να εμφανίζεται και κατάλληλο μήνυμα στην περίπτωση που ο
λογιστής δεν πληκτρολογήσει W, w, R ή r.
Λύση. Στη μεταβλητή total θα γραφεί η τελική χρέωση. Στην περίπτωση της χονδρικής
πώλησης
είναι:
total = number * price
ενώ στην περίπτωση της λιανικής:
subtotal = number * price
total = subtotal + 0.05 * subtotal.
. Όπου number είναι ο πλήθος των τεμαχίων που αγοράστηκαν.
. Η μεταβλητή total μπορεί να είναι κοινή σε δύο μπλοκ
*/
#include <iostream>
using namespace std;
const double TAX_RATE = 0.05; //5% sales tax.
int main()
{
16
char sale_type;
int number;
double price, total;
cout << number << " items at $" << price << endl;
cout << "Total Bill = $" << total;
return 0;
}
#include <iostream>
17
using namespace std;
typedef unsigned short int USHORT;
enum BOOL { FALSE, TRUE};
class Rectangle
{
public:
Rectangle(USHORT width, USHORT height);
~Rectangle(){}
void DrawShape(USHORT aWidth, USHORT aHeight, BOOL UseCurrentVals
= FALSE) const;
private:
USHORT itsWidth;
USHORT itsHeight;
};
if (UseCurrentValue == TRUE) {
printWidth = itsWidth;
printHeight = itsHeight; }
else {
printWidth = width;
printHeight = height;
}
for (int i = 0; i<printHeight; i++) {
for (int j = 0; j< printWidth; j++) {
cout << "*";
}
cout << "\n";
}
}
int main() {
Rectangle theRect( 30, 5);
cout << "DrawShape(0,0,TRUE)...\n";
theRect.DrawShape(0,0,TRUE);
cout <<"DrawShape(40,2)...\n";
theRect.DrawShape(40,2);
return 0;
}
18
12 Pointers
Δείκτες και strings
#include <iostream>
int main()
{
char color[ ] = "green";
const char *carPtr = "green";
cout << "Print the 1st character of the constant string using pointer: " << *carPtr
<< endl;
cout << "Print the 2nd character of the constant string using pointer: " <<
*(carPtr+1);
cout << "\nPrint whole string: " << carPtr;
return 0;
}
int main()
{
int a[] = {10, 20, 30}, i, offset;
int *aPtr = a;
cout<<"\nOffset notation\n";
for(offset=0; offset<3; offset++)
cout<<"*(a + "<< offset << ") = " << *(a+offset) << '\n';
cout<<"\nPointer/offset notation\n";
for(offset=0; offset<3; offset++)
cout<<"*(aPtr + "<< offset << ") = "<< *(aPtr+offset) << '\n';
return 0;
}
19
13 Αναφορές(References)
Μελετήστε το παρακάτω παράδειγμα πριν το τρέξετε. Τι έξοδο θα βγάλει;
#include <iostream>
using namespace std;
int main()
{
int intOne;
int &rSomeRef = intOne;
intOne = 5;
cout << "intOne: " << intOne << endl;
cout << "rSomeRef: " << rSomeRef << endl;
rSomeRef = 7;
cout << "intOne: " << intOne << endl;
cout << "rSomeRef: " << rSomeRef << endl;
return 0;
}
14 Inheritance
Παρέχεται η παρακάτω δήλωση κλάσης και κληρονομημένης κλάσης. Αναπτύξτε ένα
πρόγραμμα το οποίο θα χρησιμοποιεί και τις δύο κλάσεις.
#include <iostream>
using namespace std;
20
Dog();
~Dog();
BREED GetBreed() const;
void SetBreed(BREED);
WagTail();
BegForFood();
protected:
BREED itsBreed;
}
15 Polymorphism
Παρατηρήστε στον ακόλουθο κώδικα πως λειτουργεί ο πολυμορφισμός.
#include <iostream>
using namespace std;
class Horse {
public:
Horse() { cout << "Horse constructor... "; }
virtual ~Horse() { cout << "Horse destructor... "; }
virtual void Whinny() const { cout << "Whinny!... "; }
private:
int itsAge;
};
class Bird {
public:
Bird() { cout << "Bird constructor... "; }
virtual ~Bird() { cout << "Bird destructor... "; }
virtual void Chirp() const { cout << "Chirp... "; }
virtual void Fly() const { cout << "I can fly! I can fly! I can fly! "; }
private:
int itsWeight;
};
21
for (i=0; i<MagicNumber; i++) {
cout << "\n(1)Horse (2)Pegasus ";
cin >> choice;
if (choice == 2)
pHorse = new Pegasus;
else
pHorse = new Horse;
Ranch[i] = pHorse;
}
22