Documente Academic
Documente Profesional
Documente Cultură
Curs 1 - Introducere
C
++{};
C++ Acest curs
› Informatii despre curs si obiective
› Structura cursului si evaluare
› Bibliografie
› Istoric C++
› Hello, World!
› Tipuri de date
› Directive preprocesor
› Fisiere header
› C++ versus C
C++ Informatii despre curs
› Veti “sacrifica” 4 ore pe saptamana la scoala: 2 ore curs, 2
ore laborator, plus alte 4 ore suplimentare pentru proiect
(optional) si aprofundare
› Moodle:
– Prelegeri
– Laboratoare
– Exemple de cod (atunci cand este necesar)
– Proiect (optional)
– Bibliografie
– Alte materiale
C++ Obiective generale
› Educationale
– Asimilarea conceptelor ce stau la baza programarii orientate pe obiect
– Insusirea unui nou limbaj de programare: C++
– Insusire C++ Standard Library
› Rezultate
– Intelegerea teoriei si practicii programarii orientate obiect in general si a programarii C++ in
particular
› Aptitudini intelectuale
– Intelegerea si evaluarea logica a cerintelor si specificatiilor unui program
– Intelegerea ideilor complexe ale solutiilor de programare si raportarea acestora la probleme
particulare.
› Aptitudini particulare
– Abilitatea de a scrie un program procedural si orientat obiect in C/C++
› Aptitudin transferabile
– Abilitatea de rezolva probleme utilizand programarea si de a comunica rezultatele in scris.
C++ Obiectivele mele
› Sa intelegeti tehnica POO
› Sa intelegeti si sa scriti un cod sursa C++
– Este un curs de programare
– Este un curs de programare avansata (nu este C)
› Sa intelegeti ce face codul scris de voi
› Sa intelegeti cum sunt implementate anumite caracteristici ale C++
– Folositi C++ pentru viteza (altfel folositi limbaje mai facile), intelegeti probleme/facilitatile
pentru a cunoaste beneficiile
› Veti vedea
– Similaritati C, C++ si Java (si de ce)
– C++ basic – cele mai comune caracteristici
– Ce caracteristici avansate exista pentru a le avea in vedere
› Ce nu am sa predau/invat
– C
– Cum sa creati programe C++ pentru a satisface puritanii
C++ Structura cursului
› Structura
– C++ Basic (7 saptamani)
› Notiuni fundamentale C++
› Concepte POO exemplificate in C++
– C++ Avansat (7 saptamani)
› Programare generica
› C++ Standard Library
› Standards
› Nota finala:
N = L x 0.4 + E x 0.6
› unde
L = AL x 0.2 + ((TS5 + TS9) / 2) x 0.8, obs. minim 5
E = Exam + (Exam >= 8) x P x 0.1, obs. nu poate depasi nota 10
› Verificare cunoştinţe teoretice în caz de incertitudine (rotunjire în plus sau
în minus)
C++ Examen
› Durata: aproximativ 2 ore functie de complexitatea
subiectului
› Materia acoperita: tot ceea ce s-a prezentat la curs si
laborator si nu numai (daca nu va intat cum sa declarati o
variabila de tip predefinit asta nu inseamna ca nu am sa va
cer).
› Orice definiti (clase, functii membre etc) va trebui sa imi
aratati cum le folositi pentru a primi punctajul aferent.
Proiect cu functia int main {} duce la nepromovarea
examenului.
C++ Curs si laboratoare
› Curs – AC0-2
– Marti, 16:00 – 18:00
– Miercuri, 18:00 – 20:00
› Laboratoare – C02, C06
– Luni (8:00 – 10:00), (10:00 – 12:00)
– Joi (8:00 – 10:00), (12:00 - 14:00) , (14:00 - 16:00) , (16:00 -
18:00) , (18:00 - 20:00)
– Vineri , (8:00 - 10:00)
› Laboratorul din prima saptamana – recapitulare C utilizand
mediul de dezvoltare MS Visual C++
C++ Reguli
› Puteti sa aduceti laptopuri atat la curs cat si la laborator cu
conditia de a le folosi doar pentru a testa exemple de la
curs sau a rezolva problemele/cerintele de la laborator si
documentare.
› Nu aveti voie sa filmati fara acordul meu (conform
hotărârii Camerei Curții Europene a Drepturilor Omului
(CtEDO), emisă în data de 28 noiembrie 2017, care
stabilește că supravegherea video a sălilor de curs încalcă
dreptul la viața privată și la protecția datelor cu caracter
personal)
› Ma puteti “asalta” cu intrebari in timpul cursului doar
despre notiunile predate atunci
C++ Cerinte
› Algoritmi + reprezentare (scheme logice)
› Programare C
– Structura unui program in C
– Tipuri de date si moduri de reprezentare
– Functii – definitie si apel
– Structuri – definitie si utilizare
– Pointeri – declarare si utilizare
– Structuri de date – vectori, matrici etc.
C++ Ce trebuie (sau ar trebui) sa faceti
› Fiti prezenti al cursuri
› Incercati exemplele din cursuri si laboratoare
› Fiti prezenti la laboratoare (obligatoriu)
– Intrebati ce nu ati inteles la curs
– Rezolvati cerintele din laborator
– Incercati noi proiecte si cereti sfaturi
› Cititi si ce spun “Altii” despre C++: carti si site-uri web, dar
numai dupa ce ati citit cursul si laboratorul
› Incercati programele din cartile citite
› Modificati codul existent si observati efectele
› Cititi / lecturati cod scris de alti programatori: open source
C++ Feedback
› Cum stii cat de bine faci ceea ce faci?
› Utilizati la propriu sesiunile de laborator
– Cadrele didactice au parcurs si ele acest laborator din pozitia
voastra
– Veniti cu intrebari gata pregatite atat teoretice cat si practice
(programe realizate de voi)
› Ma puteti “asalta” cu intrebari inainte de curs si in pauza
despre orice probleme intampinate, neclaritati etc.
› Compilatorul este prietenul vostru
– obtineti un feedback imediat
– Verificati warning-urile la fel ca erorile
C++ Bibliografie
C++ Bibliografie
C++ Bibliografie
C++ Popularitate
C++ Popularitate
C++ C, C++, Java ?
› De ce sa invat C++ daca Java si C sunt mult mai populare
› Open source
C++ Istoria C/C++
› In laboratoarele Bell, este creat limbajul ‘B’ bazat pe BCPL (Basic
Combined Programming Language – limbaj de programare
procedural)
› 1971 – 1973: Dennis Ritchie extinde ‘B’ pentru a crea ‘C’.
› 1973 – 1980: Noi caracteristici sunt adaugate, se impune
standardizarea C-ului
› 1979: Bjarne Stroustrup (Bell Labs) extinde C pentru ‘C cu clase’
› 1982: ‘K&’R’ (Kernighan and Ritchie) propun, neoficial, C ‘standard’
› 1983: ‘C cu clase’ este redenumit in C++ si sunt adaugate noi
caracteristici
› 1989: ANSI standard C cunoscut si sub denumirea de C89
C++ Istoria C/C++
› 1992: Incepe standardizarea C++
› 1994: Standard Template Library este introdus in standardul ISO C++
› 1995: lansat Java de catre Sun
› 1998: ISO standard C++ (C++98)
› 1999: un nou standard C (C99)
› 2011: C++11
› 2013: C++13
› 2014: C++14
› 2017: C++17
› 2019: …
C++ Abordarea acestui curs
C++
C++ “Hello, World!”
//A hello world program in ANSI C //A hello world program in C++
#include <stdio.h> #include <iostream>
float 4
double 8
long double 12
– Includere fisiere
#include <iostream> // Java import
#include “mylib.h”
// sau “mylib.hpp” sau “mylib”
– Compilare conditionata
– Altele (constante simbolice, includere conditionata etc.)
C++ Directive preprocessor – compilare conditionata
› #ifdef <NAME_OF_DEFINE>
<Include this code if there was a matching #define>
› #else
<Include this code if there was NOT a matching #define>
› #endif
C++ Directive preprocesor
› #define MAX_ENTRIES 100 // constante simbolice
› #undef MAX_ENTRIES
› #ifndef UNIQUE_DEFINE_NAME_FOR_FILE
› #define UNIQUE_DEFINE_NAME_FOR_FILE
//… include restul fisierului aici …
› #endif
ANSI C C++
Fis.h Fis.h
#ifndef __CONST__H #pragma once
#define __CONST__H
extern int i;
extern int i; void ff(int);
void ff(int); //...............continutul fisierului
//...............continutul fisierului
#endif
C++ Directive preprocessor
#include <stdio.h>
Ce ar trebui sa apara pe ecran
void func1();
void func2(); Inside func1()
Inside main()
#pragma startup func1 Inside func2()
#pragma exit func2
Ce apare pe ecran deoarece doar GCC
void func1() nu suporta #pragma startup si exit
{
printf(“Apel func1()\n"); Inside main()
}
void func2()
{
printf(“Apel func2()\n");
}
int main()
{
void func1(); //nu este apel de functie
void func2(); //nu este apel de functie
printf(“Apel main()\n");
return 0;
}
C++ Directive preprocesor
› #pragma warn
- rvl – ascunde avertizarile legate de lipsa return
- par – ascunde avertizarile legate argumente/parametric neutilizati
- rch – ascunde avertizarile legate de codul ce nu va fi executat
niciodata (ex. cel dupa return)
C++ Ce poate contine un fisier header
1) declaraţii de funcţii:
void ff(int);
extern void eroare (char *);
2) declaraţii de variabile:
extern int i;
extern double f;
5) directive preprocesor
#include <stdio.h>
#define MAX 100
#include <iostream>
using namespace std;
int main( )
{
int varsta = 0;
cout << “Ce varsta aveti: ”;
cin >> varsta;
cout << “Varsta ta este: << varsta;
return 0;
}
C++
#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
char str[256] = {0};
ofstream fout;
ifstream fin;
fout.open (“Fileout.txt");
fin.open (“Filein.txt");
fin >> str;
fout << str;
fout.close();
fin.close();
return 0;
}
C++ C++ versus C
› C++ trebuie privit ca un nou limbaj de programare si nu ca
un C mai avansat
› In proiectarea C++ s-a avut in vedere “backward
compatibility”
C++ C++ versus C
› In C++ se obtine eroare de compilare daca este apelata o functie inainte de
definire, in C poate compila uneori
int main(void)
{
int const j = 20;
int *ptr = &j;
return 0;
}
C++ C++ versus C
› In C, un pointer pe void poate fi direct asignat catre alti
pointeri, in C++ este necesar un typecast explicit
#include <stdio.h>
int main()
{
void *vptr;
int *iptr = vptr; //In C++, it must be replaced
//with int *iptr=(int *)vptr;
return 0;
}
C++ C++ versus C
› In C++ o variabila constanta trebuie initializata, in C nu
este necesar
#include <stdio.h>
int main()
{
const int a; // LINE 4
return 0;
}
C++ C++ versus C
› Caracterele sunt tratate diferit in C si C++
– In C – ‘a’, ‘b’ sun tratate ca int
– In C++ - ‘a’, ‘b’ sunt tratate ca fiind char
#include<stdio.h>
int main()
{
printf("%d", sizeof('a'));
return 0;
}
C sizeof('a') = 4
C++ sizeof('a') = 1
C++
› In C utilizarea unei structuri presupune utilizarea cuvantului
struct de fiecare data, in C++ nu este necesar
#include <stdio.h>
int T;
int main()
{
struct T { double x; }; // In C++, ascunde variabila globala T
// dar in C nu
printf("%d", sizeof(T));
return 0;
}
C++ C++ versus C
› Dimensiunile tipului de date boolean sunt diferite
// output = 4 in C (dimensiunea unui int)
printf("%d", sizeof(1==1));