Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu
niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodÄ…
kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym,
magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądz
towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce
informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za
ich wykorzystanie, ani za zwiÄ…zane z tym ewentualne naruszenie praw patentowych lub
autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej
odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych
w książce.
Redaktor prowadzący: Michał Mrowiec
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie?cwcp11
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Kody zródłowe wybranych przykładów dostępne są pod adresem:
ftp://ftp.helion.pl/przyklady/cwcp11.zip
ISBN: 978-83-246-3935-9
Copyright © Helion 2012
Printed in Poland.
" Kup książkę " Księgarnia internetowa
" Poleć książkę " Lubię to! Nasza społeczność
" Oceń książkę
Spis tre ci
Wst p 5
Rozdzia 1. Narz dzia programistyczne 9
Rozdzia 2. S owo kluczowe auto, czyli kompilator okre la typ 13
Rozdzia 3. S owo kluczowe decltype, czyli typ taki sam jak tamten 19
Rozdzia 4. S owo kluczowe constexpr, czyli wyra enia sta e 23
Rozdzia 5. S owo kluczowe nullptr 31
Rozdzia 6. Lepsze typy wyliczeniowe enum class 35
Rozdzia 7. Inicjalizowanie tablic 39
Rozdzia 8. Inicjalizowanie klas na podobie stwo tablic 47
Rozdzia 9. Krotki (rekordy) 53
Rozdzia 10. Metody oznaczone default lub delete 61
Rozdzia 11. Bezpieczne wska niki unique_ptr i shared_ptr 69
Rozdzia 12. Kopiowanie i przenoszenie 79
Rozdzia 13. P tla for( ... : ...) dla kolekcji danych 87
Rozdzia 14. Prostsze tworzenie obiektów 91
Poleć książkę
Kup książkę
4 C++11. Nowy standard " wiczenia
Rozdzia 15. S owo kluczowe explicit i mocniejsza ochrona
przed przypadkowymi konwersjami 95
Rozdzia 16. Operator sizeof() zna rozmiary elementów klasy 99
Rozdzia 17. Szablony ze zmienn liczb argumentów 101
Rozdzia 18. Funkcje i wyra enia lambda 113
Zako czenie 123
Poleć książkę
Kup książkę
13
P tla for( ... : ...)
dla kolekcji danych
Standard c++11 wprowadza uproszczon p tl for( ...), prze-
biegaj c przez ca kolekcj podan jako argument. P tla ta jest
odpowiednikiem znanej z innych j zyków p tli foreach( ...)
rób co dla ka dego elementu kolekcji.
W I C Z E N I E
13.1
Wypisanie wszystkich elementów tablicy za pomoc
nowej p tli for( ...)
Zadeklaruj tablic i za pomoc nowej p tli for() dla kolekcji wyprowad
na ekran jej elementy (rysunek 13.1):
...
int tablica[5] = {1, 2, 3, 4, 5};
for(int element : tablica)
{
cout << element << endl;
}
...
Nowa p tla for() ma dwa pola: pole okre lenia zmiennej o typie zgod-
nym z typami w tablicy i pole okre lenia samej tablicy.
Poleć książkę
Kup książkę
88 C++11. Nowy standard " wiczenia
Rysunek 13.1. Nowa p tla for() przebiega po tablicy i wy wietla jej elementy
W I C Z E N I E
13.2
Modyfikacja wszystkich elementów tablicy
za pomoc nowej p tli for( ...)
Zadeklaruj dla odmiany tablic vector i za pomoc nowej p tli for() dla
kolekcji zmodyfikuj elementy kolekcji:
...
#include
...
int main()
{
vector v={1, 2, 3};
for( double &r : v)
{
r = 3.14;
}
cout << v[ 0] << ", " << v[ 1] << ", " << v[ 2] << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
W stosunku do poprzedniego wiczenia zmienna robocza r zosta a za-
deklarowana jako referencja (odwo anie) i p tla for dla kolekcji umiesz-
cza pod ni kolejno wszystkie elementy tablicy. Modyfikacja referencji
oznacza modyfikacj oryginalnego elementu tablicy.
Rysunek 13.2. Modyfikacja kolekcji za pomoc nowej p tli dla zakresów
dla kolekcji
Poleć książkę
Kup książkę
Rozdzia 13. " P tla for( ... : ...) dla kolekcji danych 89
Podsumowanie
Wi kszo iteracji po kolekcjach odbywa si od pocz tku do ko ca .
Dlaczego t p tl otrzymali my tak pó no?
Poleć książkę
Kup książkę
90 C++11. Nowy standard " wiczenia
Poleć książkę
Kup książkę
14
Prostsze tworzenie
obiektów
W standardzie c++11 znajdujemy dwa nowe drobiazgi:
zadeklarowane w typach u ytkownika (klasach, strukturach) dane
mog by inicjalizowane bezpo rednio, a nie jak dot d
w konstruktorach;
konstruktory typów u ytkownika mog wywo ywa inne
konstruktory, co dotychczas te by o zabronione.
W I C Z E N I E
14.1
Inicjalizowanie ustroju klasy bezpo rednio
i za pomoc konstruktorów
Zadeklaruj klas , w której zademonstrujesz zarówno bezpo rednie ini-
cjalizowanie zmiennej, jak i stare rozwi zanie czyli inicjalizacj
zmiennej za pomoc konstruktora:
...
class Stara
{
public:
int a;
Stara():a( 17){cout << "Konstruktor" << endl;}
};
Poleć książkę
Kup książkę
92 C++11. Nowy standard " wiczenia
class Nowa
{
public:
int a = 17;
Nowa(){ cout << "Konstruktor" << endl;}
};
int main()
{
Stara s;
cout << s.a << endl;
Nowa n;
cout << n.a << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Dwie klasy maj pewn zmienn . Klasa Stara inicjalizuje t zmienn
za pomoc do tej pory jedynej dost pnej metody, czyli w konstruktorze
(tutaj za pomoc tzw. listy inicjalizacyjnej konstruktora). Klasa Nowa
inicjalizuje swoj zmienn przez bezpo rednie przypisanie warto ci
w momencie deklaracji klasy. Konstruktory mog ewentualnie zmieni
t warto .
Rysunek 14.1. Niestety, kompilator jeszcze nie zna bezpo redniego
inicjalizowania. Zgodnie z dotychczasowym standardem j zyka domaga si ,
by bezpo rednio inicjalizowana zmienna by a statyczna i sta a
W I C Z E N I E
14.2
Konstruktor mo e inicjalizowa klas przez wywo anie
innego konstruktora
Przygotuj klas i zaopatrz j w takie konstruktory, by jeden z nich wy-
wo ywa inny:
...
class T
{
Poleć książkę
Kup książkę
Rozdzia 14. " Prostsze tworzenie obiektów 93
private:
int a;
public:
T():a( 17){cout << "Konstruktor 'T()'" << endl;}
T( double r):T(){cout << "Konstruktor 'T( double r)'" << endl;}
};
int main()
{
T a;
T b( 3.14);
system("PAUSE");
return EXIT_SUCCESS;
}
Typ T w konstruktorze z argumentem wywo uje inny konstruktor tej e
klasy. Do tej pory nie by o to mo liwe ka dy konstruktor musia
przeprowadza niezale nie inicjalizacj obiektu. Konstruktor móg wy-
wo ywa innego konstruktora tylko w obr bie drzewa dziedziczenia.
Mówi c inaczej konstruktor klasy pochodnej wywo ywa konstruk-
tora klasy bazowej. W obr bie jednej klasy takie wywo ania by y nie-
mo liwe.
Rysunek 14.2. Kompilator jeszcze nie realizuje opisywanego tu usprawnienia.
Komunikat g osi, e wywo anie konstruktora przez konstruktor by oby mo liwe,
gdyby nasza klasa dziedziczy a po sobie samej
Podsumowanie
Chyba ka dy m ody programista, który deklarowa pierwsz klas
w swoim yciu, zastanawia si , dlaczego nie mo e zainicjowa jej pól
warto ciami. By yby to jakby warto ci domy lne, wst pne, które kon-
struktory mog zmieni .
Poleć książkę
Kup książkę
94 C++11. Nowy standard " wiczenia
Dodatkowo otrzymujemy mechanizm wywo ywania jednego konstruk-
tora przez innego. Je li obydwa konstruktory tak samo (lub podobnie)
inicjalizuj klas po co mamy powtarza ten sam kod?
Poleć książkę
Kup książkę
Wyszukiwarka
Podobne podstrony:
C Nowy standard cwiczenia cwcp11
0111 11 05 2009, cwiczenia nr 11 ,
2014 11 09 ZUSO Ćwiczenie 04
11 Nowy Testament List do Filipian
ALL 11 nowy programator firmy Hi Lo Systems
Ćwiczenie 11 A
RADIOLOGIA, ĆWICZENIE 6, 5 11 2012 MN
Cwiczenia planeta nowa 2 str 9 11
Hydrologia cwiczenia 11 i 12
36 cwiczenia 11
Ćwiczenia 5 3 11
Materiały do cwiczenia nr 11
więcej podobnych podstron