INF3105 — Structure de données et algorithmes
Automne 2016
#include <iostream> using namespace std; int main(){ int a=1, b=2, c=3, d=4; int* pa=&a; int* pb=&b; int* pc=&c, *pd=&d; cout << "a=" << a << "\tb=" << b << "\tc=" << c << "\td=" << d << endl; cout << "pa=" << pa << "\tpb=" << pb << "\tpc=" << pc << "\tpd=" << pd << endl; *pa = 4; cout << "a=" << a << "\tb=" << b << "\tc=" << c << "\td=" << d << endl; cout << "pa=" << pa << "\tpb=" << pb << "\tpc=" << pc << "\tpd=" << pd << endl; pa = pb; *pa = 8; cout << "a=" << a << "\tb=" << b << "\tc=" << c << "\td=" << d << endl; cout << "pa=" << pa << "\tpb=" << pb << "\tpc=" << pc << "\tpd=" << pd << endl; c = 10; d += *pd; cout << "a=" << a << "\tb=" << b << "\tc=" << c << "\td=" << d << endl; cout << "pa=" << pa << "\tpb=" << pb << "\tpc=" << pc << "\tpd=" << pd << endl; return 0; }
g++ lab2ex1.cpp -o lab2ex1 ./lab2ex1
#include <iostream> using namespace std; int main(){ int a=1, b=2, c=3, d=4; int& ra=a; int& rb=&b; int* pc=&c, *pd=&d; cout << "a=" << a << "\tb=" << b << "\tc=" << c << "\td=" << d << endl; cout << "ra=" << ra << "\trb=" << rb << "\tpc=" << pc << "\tpd=" << pd << endl; ra = 4; cout << "a=" << a << "\tb=" << b << "\tc=" << c << "\td=" << d << endl; cout << "ra=" << ra << "\trb=" << rb << "\tpc=" << pc << "\tpd=" << pd << endl; ra = rb; cout << "a=" << a << "\tb=" << b << "\tc=" << c << "\td=" << d << endl; cout << "ra=" << ra << "\trb=" << rb << "\tpc=" << pc << "\tpd=" << pd << endl; c = 10; d += *pd; cout << "a=" << a << "\tb=" << b << "\tc=" << c << "\td=" << d << endl; cout << "ra=" << ra << "\trb=" << rb << "\tpc=" << pc << "\tpd=" << pd << endl; return 0; }
g++ lab2ex2.cpp -o lab2ex2
g++ lab2ex2.cpp -o lab2ex2 ./lab2ex2
Expérimentez l'exemple retrouvé à la section 2.10.1 des notes de cours.
// lab2ex3.cpp #include <iostream> using namespace std; void test(int a, int* b, int* c, int& d, int*& e){ a=11; // effet local b++; // change l’adresse locale de b *c=13; // change la valeur pointee par c d=14; // change la valeur referee par d e=c; // change la valeur du pointeur (adresse) pour celle de c. } int main(){ int v1=1, v2=2, v3=3, v4=4, *p5=&v1; test(v1, &v2, &v3, v4, p5); cout<<v1<<"\t"<<v2<<"\t"<<v3<<"\t"<<v4<<"\t"<<*p5<<"\t"<<endl; return 0; }
#include <iostream> class Point { public: Point(double x=0, double y=0); Point(const Point&); ~Point(); double distance(const Point&) const; private: double x; double y; friend std::ostream& operator << (std::ostream&, const Point&); friend std::istream& operator >> (std::istream&, Point&); };
#include <assert.h> #include "point.h" Point::Point(double _x, double _y) : x(_x), y(_y){ } Point::Point(const Point& point) : x(point.x), y(point.y){ } Point::~Point(){ } double Point::distance(const Point& point) const { // TODO return 0; } std::ostream& operator << (std::ostream& os, const Point& point) { os << "(" << point.x << "," << point.y << ")"; return os; } std::istream& operator >> (std::istream& is, Point& point) { char po, vir, pf; is >> po; if(is){ is >> point.x >> vir >> point.y >> pf; assert(po=='('); assert(vir==','); assert(pf==')'); } return is; }
#include "point.h" using namespace std; int main(){ Point a; Point b(3,4); cout << a.distance(b) << endl; return 0; }
g++ -o lab2ex4a lab2ex4a.cpp point.cpp ./lab2ex4a
g++ -o lab2ex4a lab2ex4a.cpp point.cpp ./lab2ex4a
#include "point.h" using namespace std; void test(Point p1, Point& p2, const Point& p3, Point* p4){ cout << p1 << endl; p1 = p2; *p4 = p3; p4 = &p1; } int main(){ Point a, b(3,4), c(0,5); Point*d = new Point(5,0); test(a,b,c,d); cout << a << '\t' << b << '\t' << c << '\t' << *d << endl; return 0; }
g++ -o lab2ex4b lab2ex4b.cpp point.cpp ./lab2ex4b
g++ -o lab2ex4b lab2ex4b.cpp point.cpp ./lab2ex4b
Point::Point(double _x, double _y) : x(_x), y(_y){ std::cerr << "Point::Point(double, double)" << std::endl; } Point::Point(const Point& point) : x(point.x), y(point.y){ std::cerr << "Point::Point(const Point&)" << std::endl; } Point::~Point(){ std::cerr << "Point::~Point()" << std::endl; }
g++ -o lab2ex4b lab2ex4b.cpp point.cpp ./lab2ex4b
Créez le programme lab2ex5.cpp à partir du code ci-dessous.
#include "point.h" class Rectangle{ public: Rectangle(); Rectangle(const Point& p1, const Point& p2); private: Point point1, point2; }; Rectangle::Rectangle() { } Rectangle::Rectangle(const Point& p1, const Point& p2) : point1(p1) { point2 = p2; } int main(){ Rectangle* r1 = new Rectangle(); Rectangle* r2 = new Rectangle(Point(0,0), Point(10,10)); Rectangle* r3 = new Rectangle(); *r3 = *r2; r1 = r3; delete r1; delete r2; delete r3; }
g++ -o lab2ex5 lab2ex5.cpp point.cpp ./lab2ex5
g++ -o lab2ex5 lab2ex5.cpp point.cpp ./lab2ex5
Cet exercice est inspiré de la question 2 de l'examen de mi-session de la session d'hiver 2013.
Soit le programme lab2ex6.cpp suivant.
#include <iostream> class Allo{ public: Allo(int x_=0) : x(x_) { std::cout << "A" << x << " "; } Allo(const Allo& autre) : x(autre.x) { std::cout << "B" << x << " "; } ~Allo() { std::cout << "C" << x << " "; } int x; }; void f1(Allo a1, Allo& a2, Allo* a3){ a1.x++; a2.x--; a3+=1; (a3->x)+=2000; } int main(){ Allo tab[3]; Allo a(20); Allo* b = new Allo(5); Allo* c = tab + 1; f1(a, b, c); std::cout << std::endl << "-------" << std::endl; Allo* t = new Allo[4]; t[2] = Allo(9); std::cout << std::endl; }
Avant de compiler et d'exécuter le programme ci-haut, essayez de répondre aux questions suivantes.