Moje začátky v C++

Aneb jak jsem s pomocí znalostí Javy a Céčka (které už si moc nevzpomínám) učil C++. Malá poznámka na začátek - používám vývojové prostředí Microsoft Visual Studio 2005, ale myslím, že moje zkušenosti půjdou použít i jinde.

Vstup a výstup

Z jazyka C si ještě pamatuji, že jsem standardní vstup a výstup na obrazovku řešil pomocí scanf a printf. V C++ však přibyly dvě přívětivé funkce cin a cout. Výhoda spočívá v tom, že tyto funkce samy rozpoznají datový typ proměnné a tudíž odpadá ruční zadávání (např. "%d" pro celé číslo).

Abychom mohli používat tyto funkce, musíme nejprve na začátku deklarovat hlavičkový soubor iostream a použít jmenný prostor std. Tady jsem poprvé natrefil na namespace, je to “novinka” C++ a když ji zapomenete napsat, tak se možná budete hodně divit, když to bude psát, že funkci cin vůbec nezná. Je to tím, že funkce cin a další její kolegové jsou deklarovány v jmenném prostoru std. Pokud si na začátku programu nepomůžeme kouzelným slovíčkem using namespace, tak v programu budeme muset používat zápis std::cin nebo std::cout.

Jako příklad uvedu jednoduché načtení čísla zadaného uživatelem (ze vstupu) do proměnné cislo a následné vypsání tohoto čísla na obrazovku (na výstup):

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    	int cislo;

	cout << "Napiste nejake cislo: ";
	cin >> cislo;
	cout << "Zadane cislo: " << cislo << endl;

	return 0;
}

Třídy

Nebudu rozebírat, co je třída nebo objektově orientované programování, ale chci poukázat na to, jak se třídy v jazyku C++ píší. Jedna třída se oproti Javě zapíše do dvou souborů a to do hlavičkového souboru (.h), kde jsou pouze deklarace proměnných a funkcí (prototypů), a do zdrojového souboru (.cpp), kde už přímo píšeme funkce této třídy. Kromě prototypů můžeme do hlavičkového souboru psát i tzv. inline funkce - to znamená, že můžeme obsah funkce zapsat přímo k deklaraci funkce. Více vysvětlí příklad:

Soubor Trida.h:

#pragma once
/*
	#pragma once zajisti, aby byla tato hlavicka
	nactena do pameti jenom jednou i pri vice pouziti
	#include "Trida.h"
*/

class Trida
{
/*
	v Jave se psalo private nebo public
	pred kazdou promennou nebo funkci, ale
	v C++ se to pise takto do bloku:
*/
private:
	int a, b;
	int soucin;
public:
	Trida(int a = 0, int b = 0); // konstruktor se dvema parametry
	int vrat_a() { return a; } // vlozena (inline) funkce
	int vrat_b() { return b; }
	void nastav_a(int cislo);
	void nastav_b(int cislo);
	int vysledek() { return soucin; }
	/*
		takto se pise destruktor:
		~Trida(void);
	*/
}; // pozor - tady patri strednik !

Soubor Trida.cpp:

#include "StdAfx.h"
#include "Trida.h"

/*
	pokud bych volal konstruktor bez parametru (např. Trida test),
	tak promenne a, b zustanou v nule a soucin vynuluji v konstruktoru
*/
Trida::Trida(int a, int b)
{
	/*
	tady jsem schvalne deklaroval stejne nazvy promennych
	jako ma tato trida, abych ukazal pouziti this, ktery
	slouzi jako ukazatel na tuto tridu
	*/
	this->a = a;
	this->b = b;
	if (a > 0 && b > 0)
		soucin = a * b;
	else
		soucin = 0;
}
void Trida::nastav_a(int cislo)
{
	if (cislo > 0)
		a = cislo;
}

void Trida::nastav_b(int cislo)
{
	if (cislo > 0)
		b = cislo;
}

A nakonec ukázka použití mojí nové třídy:

#include "stdafx.h"
#include <iostream>
using namespace std;

// tady deklaruji hlavickovy soubor moji tridy,
// abych ji mohl pouzivat
#include "Trida.h"

int _tmain(int argc, _TCHAR* argv[])
{
   	Trida test(3, 4);

	cout << "A je " << test.vrat_a() << " a B je " << test.vrat_b() << endl;
	cout << "Vysledek: " << test.vysledek() << endl;

	return 0;
}

Sice je naprosto nezvyklé dělat násobení dvou čísel tak složitým způsobem, ale jako příklad to myslím poslouží dobře.

Visual Studio 2005

V tomto vývojovém prostředí se takovéto jednoduché aplikace, které běží jenom na příkazovém řádku dělají tak, že při vytváření nového projektu vyberete “Win32 Console Application”. Pak pro kompilaci a spuštění napsaného kódu je dobré stisknout kombinaci CTRL + F5, protože po vykonání kódu nedojde k ukončení aplikace a zavření okna s příkazovým řádkem, ale čeká se na stisk klávesy.

Toť vše, co jsem chtěl v tomto článku sdělit. Uvítám jakékoliv hodnocení v komentářích. Pokud vše půjde hladce, tak bych chtěl z tohoto příspěvku udělat seriál více článků.

comments powered by Disqus