Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Polimorfizm.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- class Wyjatek {
- public:
- string powiadomienie;
- Wyjatek(string p) {
- powiadomienie = p;
- }
- void rezultat() {
- cout << powiadomienie << endl;
- }
- };
- class Zero : public Wyjatek {
- public:
- Zero(string p) :Wyjatek(p) {}
- void rezultat() {
- Wyjatek::rezultat();
- }
- };
- class Mniejszy : public Wyjatek {
- public:
- Mniejszy(string p) :Wyjatek(p) {}
- void rezultat() {
- Wyjatek::rezultat();
- }
- };
- class Ksztalt {
- public:
- virtual void obliczPole() = 0;
- virtual void obliczObwod() = 0;
- };
- class Kolo : public Ksztalt {
- float r;
- public:
- Kolo(float promien) {
- r = promien;
- }
- void obliczPole() {
- if (r == 0) throw new Zero("Promien wynosi 0");
- else if (r < 0) throw new Mniejszy("Promien jest mniejszy od 0");
- else {
- cout << "Pole kola= " << 3.14 * r * r << endl;
- }
- }
- void obliczObwod() {
- if (r == 0) throw new Zero("Promien wynosi 0");
- else if (r < 0) throw new Mniejszy("Promien jest mniejszy od 0");
- else
- {
- cout << "Obwod kola= " << 3.14 * 2 * r << endl;
- }
- }
- };
- class Kwadrat : public Ksztalt {
- float a;
- public:
- Kwadrat(float bok) {
- a = bok;
- }
- void obliczPole() {
- if (a == 0) throw new Zero("Dlugosc boku wynosi 0");
- else if (a < 0) throw new Mniejszy("Dlugosc boku jest mniejsza od 0");
- else {
- cout << "Pole kwadratu= " << a * a << endl;
- }
- }
- void obliczObwod() {
- if (a == 0) throw new Zero("Dlugosc boku wynosi 0");
- else if (a < 0) throw new Mniejszy("Dlugosc boku jest mniejsza od 0");
- else
- {
- cout << "Obwod kwadratu= " << 4 * a << endl;
- }
- }
- };
- int main()
- {
- Kolo obj(2.0);
- try {
- obj.obliczPole();
- }
- catch (Zero* wyjatek) {
- wyjatek->rezultat();
- }
- catch (Mniejszy* wyjatek) {
- wyjatek->rezultat();
- }
- catch (...) {
- cout << "Jakis inny wyjatek" << endl;
- }
- Kwadrat obj2(0.0);
- try {
- obj2.obliczPole();
- }
- catch (Zero* wyjatek) {
- wyjatek->rezultat();
- }
- catch (Mniejszy* wyjatek) {
- wyjatek->rezultat();
- }
- catch (...) {
- cout << "Jakis inny wyjatek" << endl;
- }
- Kwadrat obj3(-5.0);
- try {
- obj2.obliczPole();
- }
- catch (Zero* wyjatek) {
- wyjatek->rezultat();
- }
- catch (Mniejszy* wyjatek) {
- wyjatek->rezultat();
- }
- catch (...) {
- cout << "Jakis inny wyjatek" << endl;
- }
- //polimorfizm pozwala na wyslanie do metody wskazniku Ksztaltu
- Ksztalt *wsk;
- wsk = &obj;
- wsk->obliczObwod();
- wsk = &obj2;
- try {
- wsk->obliczObwod();
- }
- catch (Zero* wyjatek) {
- wyjatek->rezultat();
- }
- catch (...) {
- cout << "Jakis inny wyjatek" << endl;
- }
- Kolo obj4(3.0);
- wsk = &obj4;
- wsk->obliczObwod();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement