Laboratoria nr 12 program nr 1

Funkcje, ogólna struktura funkcji. Umieszczanie definicji funkcji w programie. Zmienne lokalne i globalne. Zasięg i widzialność identyfikatorów.

#include "stdafx.h"
#include <iostream>

// Funkcja inline
inline double square(double x) { return x*x;};

// Funkcja zachowujaca wartosc na ktora wskazuje wskaznik i zwracajaca nowy wynik
float square(float const * x);

// Modyfikacja wartosci pod adresem wskazywanym przez wskaznik i zwrocenie dodatkowo adresu modyfikowanej wartosci
float *psquare(float * x);

// Alternatywne do wskaznikow przekazywanie przez referencje
void square(float &x);

float psquare(float const &x);

/**
* Funkcje inline wystepuja w C++, C tej funckji nie posiada.
* Program demonstrujacy tworzenie, wywolywanie i dzialanie funkcji inline, jak i pozostalych funkcji
* @author Marcin Mironczuk
*/
int main()
{
	double a = 0;

	std::cout << "Podaj wartosc a: " << std::endl;
	std::cin >> a;
	std::cout << "Kwadrat liczby to: " << square(a) << std::endl;

	double *p1 = &a;

	std::cout << "Wartosc p1: " << *p1 << std::endl;
	std::cout << "Adres p1: " << p1 << std::endl;
	std::cout << "Adres a: " << &a << std::endl;

	float k = 2;
	float *p2 = &k;

	std::cout << "Wartosc k: " << square(p2) << std::endl;
	std::cout << "Wartosc k: " << *psquare(p2) << std::endl;
	std::cout << "Wartosc k po modyfikacji przez *psquare(): " << k << std::endl;
	
	square(k);
	std::cout << "Wartosc k po modyfikacji przez square(float &x): " << k << std::endl;
	std::cout << "Modyfikacja k poprzez psquare(float const &x): " << psquare(k) << std::endl;
	std::cout << "Wartosc k po modyfikacji przez psquare(float const &x): " << k << std::endl;

	std::cin.get();
	std::cin.get();

	return 0;
}

// zabezpiecznie przed modyfikacja wartosci wskazanej
float square(float const * x) {
	return (*x)*(*x);
};

float *psquare(float * x) {
	*x = (*x)*(*x);
	return x;
};

// Troche niebezpiecznie modyfikujemy przekazywana wartosc
void square(float &x) {
	x = x*x;
};

// Bardziej bezpieczny sposob
float psquare(float const &x) {
	return x*x;
}

Skomentuj ten wpis