C i C++ - najistotniejsze róznice

Transkrypt

C i C++ - najistotniejsze róznice
C i C++ - najistotniejsze różnice
Bogdan Kreczmer
ZPCiR IIAiR PWr
pokój 307 budynek C3
[email protected]
c 2005–2008 Bogdan Kreczmer?
Copyright ? Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostepiony
˛
pod
warunkiem wykorzystania wyłacznie
˛
do własnych prywatnych potrzeb i może on być kopiowany wyłacznie
˛
w całości, razem z
niniejsza˛ strona˛ tytułowa.
˛
1
C++ nie jest nadzbiorem C
• Deklaracja stałych. Zachowanie zgodności wymaga jawnego dowiazania.
˛
ANSI C: const int Zm=23; ≡ extern const int Zm=23;
ANSI/ISO C++: const int Zm=23; ≡ static const int Zm=23;
• Rozmiary stałych znakowych:
ANSI C: sizeof (’a’) ≡ sizeof (int)
ANSI/ISO C++: sizeof (’a’) ≡ sizeof (char)
• Nie zadeklarowane funkcje:
ANSI C: przyjmowane jest automatycznie int fun(...).
ANSI/ISO C++: jest to niedopuszczalne.
• Deklaracja extern int fun():
ANSI C: równoważna extern int fun(...).
ANSI/ISO C++: extern int fun(void).
2
Programowanie w C
(prosty przykład)
#include<stdio.h>
struct LZespolona { /∗ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ∗/
double re, im;
}; /∗ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ∗/
LiczbaZespolona Dodaj( LiczbaZespolona Z1, LiczbaZespolona Z2)
{ Z2.re += Z1.re; Z2.im += Z1.im; return Z2; }
int main( )
{
struct LZespolona A, B;
A.im = 1; A.re = 2; B = A;
A = Dodaj(A,B);
printf("%g %gi\n",A.re,A.im);
return 0;
}
3
Rozszerzenie struktur do klas w C++ (prosty przykład)
#include<iostream>
using namespace std;
struct LiczbaZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
double re, im;
LiczbaZespolona Dodaj( LiczbaZespolona Z );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LiczbaZespolona LiczbaZespolona::Dodaj( LiczbaZespolona Z )
{ Z.re += re; Z.im += im; return Z; }
int main()
{
LiczbaZespolona A, B;
A.im = 1; A.re = 2; B = A;
A = A.Dodaj(B);
cout << A.re << ” ” << A.im << endl;
}
4
Rozszerzenie struktur do klas w C++ z operatorami
#include<iostream>
using namespace std;
struct LiczbaZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
double re, im;
LiczbaZespolona operator + ( LiczbaZespolona Z );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LiczbaZespolona LiczbaZespolona::operator + ( LiczbaZespolona Z )
{ Z.re += re; Z.im += im; return Z; }
int main()
{
LiczbaZespolona A, B;
A.im = 1; A.re = 2; B = A;
A = A + B;
cout << A.re << ” ” << A.im << endl;
}
5
Jawne wywołanie operatora
#include<iostream>
using namespace std;
struct LiczbaZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
double re, im;
LiczbaZespolona operator + ( LiczbaZespolona Z );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LiczbaZespolona LiczbaZespolona::operator + ( LiczbaZespolona Z )
{ Z.re += re; Z.im += im; return Z; }
int main()
{
LiczbaZespolona A, B;
A = A + B;
A.im = 1; A.re = 2; B = A;
A = A.operator+(B);
cout << A.re << ” ” << A.im << endl;
}
6
Pytania i ćwiczenia
1. Czy wymuszajac
˛ kompilacje˛ programu w jezyku
˛
C kompilatorem jezyka
˛
C++ mamy pewność, że po uruchomieniu program ten da takie same wyniki jak
po kompilacji kompilatorem jezyka
˛
C?
2. Czy program poprawny składniowo w jezyku
˛
C jest również zawsze poprawny
w sensie składni jezyka
˛
C++ ?