๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ Development Study/๐Ÿ‘จ๐Ÿพ‍๐Ÿ’ป C++

๋‹คํ˜•์„ฑ

by eazuooz 2022. 8. 22.

์ด ์žฅ์„ ๋” ๊นŠ์ด ์ดํ•ดํ•˜๊ธฐ ์ „์— ํฌ์ธํ„ฐ์™€ ํด๋ž˜์Šค ์ƒ์†์— ๋Œ€ํ•ด ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ํ‘œํ˜„์˜ ์˜๋ฏธ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ‘œ์‹œ๋œ ์„น์…˜์„ ๊ฒ€ํ† ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

Statement :Explained in:
int A::b(int c) { } Classes
a->b Data structures
class A: public B {}; Friendship and inheritance

๋ถ€๋ชจ(base) ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ

ํด๋ž˜์Šค ์ƒ์†์˜ ์ฃผ์š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ํŒŒ์ƒ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์™€ ํ˜•์‹ ํ˜ธํ™˜๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹คํ˜•์„ฑ ์€ ์ด ๋‹จ์ˆœํ•˜์ง€๋งŒ ๊ฐ•๋ ฅํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

์‚ฌ๊ฐํ˜• ๋ฐ ์‚ผ๊ฐํ˜• ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์˜ˆ์ œ๋Š” ์ด ๊ธฐ๋Šฅ์„ ๊ณ ๋ คํ•˜์—ฌ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// pointers to base class
#include <iostream>
using namespace std;

class Polygon {
  protected:
    int width, height;
  public:
    void set_values (int a, int b)
      { width=a; height=b; }
};

class Rectangle: public Polygon {
  public:
    int area()
      { return width*height; }
};

class Triangle: public Polygon {
  public:
    int area()
      { return width*height/2; }
};

int main () {
  Rectangle rect;
  Triangle trgl;
  Polygon * ppoly1 = &rect;
  Polygon * ppoly2 = &trgl;
  ppoly1->set_values (4,5);
  ppoly2->set_values (4,5);
  cout << rect.area() << '\n';
  cout << trgl.area() << '\n';
  return 0;
}

ํ•จ์ˆ˜ ๋Š” (์ด๋ฆ„ ๋ฐ ) main์— ๋Œ€ํ•œ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค . ์ด๋“ค์—๋Š” ๊ฐ๊ฐ ๋ฐ ์œ ํ˜•์˜ ๊ฐœ์ฒด์ธ ๋ฐ ์˜ ์ฃผ์†Œ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค . ์™€ ๋Š” ๋ชจ๋‘ ์—์„œ ํŒŒ์ƒ๋œ ํด๋ž˜์Šค ์ด๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ํ• ๋‹น์€ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค . ์—ญ์ฐธ์กฐ ๋ฐ ( ์™€ ํ•จ๊ป˜ ๋ฐ )๋Š” ์œ ํšจํ•˜๋ฉฐ ์šฐ๋ฆฌ๊ฐ€ ์ง€์  ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๋‘ ๋ช…๋ น๋ฌธ์€ ์ด์ „ ์˜ˆ์—์„œ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.Polygonppoly1ppoly2recttrglRectangleTriangleRectangleTrianglePolygon

ppoly1ppoly2ppoly1->ppoly2->

ppoly1->set_values (4,5);
rect.set_values (4,5);

๊ทธ๋Ÿฌ๋‚˜ ๋‘˜ ๋‹ค ppoly1๋ฐ ์˜ ํ˜•์‹์ด ์— ๋Œ€ํ•œ ppoly2ํฌ์ธํ„ฐ ์ด๊ธฐ ๋•Œ๋ฌธ์— Polygon(์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ Rectangle๋‚˜ ํฌ์ธํ„ฐ๊ฐ€ Triangle์•„๋‹˜) ์—์„œ ์ƒ์†๋œ ๋ฉค๋ฒ„๋งŒ Polygon์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ณ  ํŒŒ์ƒ ํด๋ž˜์Šค Rectangle๋ฐ ์˜ ๋ฉค๋ฒ„๋Š” ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค Triangle. ์ด๊ฒƒ์ด ์œ„์˜ ํ”„๋กœ๊ทธ๋žจ ์ด ํฌ์ธํ„ฐ ๋Œ€์‹  ๋ฐ ์ง์ ‘ area๋‘ ๊ฐœ์ฒด์˜ ๋ฉค๋ฒ„์— ์•ก์„ธ์Šคํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋Š” ๋ฉค๋ฒ„์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฉค๋ฒ„ ๋Š” ํŒŒ์ƒ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋Œ€์‹  ์˜ ๋ฉค๋ฒ„์ธ ๊ฒฝ์šฐ ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ ๋ฒ„์ „์˜recttrglarea

areaPolygonareaPolygonRectangleTrianglearea, ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ๊ณตํ†ต ๋ฒ„์ „์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ€์ƒ ํ•จ์ˆ˜

๊ฐ€์ƒ ๋ฉค๋ฒ„๋Š” ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ ์†์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํŒŒ์ƒ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉค๋ฒ„ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ๊ฐ€์ƒ์ด ๋˜๋Š” ๊ตฌ๋ฌธ์€ ์„ ์–ธ ์•ž์— virtualํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

// virtual members
#include <iostream>
using namespace std;

class Polygon {
  protected:
    int width, height;
  public:
    void set_values (int a, int b)
      { width=a; height=b; }
    virtual int area ()
      { return 0; }
};

class Rectangle: public Polygon {
  public:
    int area ()
      { return width * height; }
};

class Triangle: public Polygon {
  public:
    int area ()
      { return (width * height / 2); }
};

int main () {
  Rectangle rect;
  Triangle trgl;
  Polygon poly;
  Polygon * ppoly1 = &rect;
  Polygon * ppoly2 = &trgl;
  Polygon * ppoly3 = &poly;
  ppoly1->set_values (4,5);
  ppoly2->set_values (4,5);
  ppoly3->set_values (4,5);
  cout << ppoly1->area() << '\n';
  cout << ppoly2->area() << '\n';
  cout << ppoly3->area() << '\n';
  return 0;
}

์ด ์˜ˆ์—์„œ ์„ธ ๊ฐ€์ง€ ํด๋ž˜์Šค( Polygon, Rectangle๋ฐ Triangle)๋Š” ๋ชจ๋‘ ๋™์ผํ•œ ๋ฉค๋ฒ„ ( width, height, ๋ฐ functions set_values๋ฐ area.

๋ฉค๋ฒ„ ํ•จ์ˆ˜ ๋Š” ๋‚˜์ค‘์— ๊ฐ ํŒŒ์ƒ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ํด๋ž˜์Šค์—์„œ์™€ area๊ฐ™์ด ์„ ์–ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค . virtual๋น„๊ฐ€์ƒ ๋ฉค๋ฒ„๋Š” ํŒŒ์ƒ ํด๋ž˜์Šค์—์„œ๋„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํŒŒ์ƒ ํด๋ž˜์Šค์˜ ๋น„๊ฐ€์ƒ ๋ฉค๋ฒ„๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์˜ ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  virtual์ˆ˜ area์—†์Šต๋‹ˆ๋‹ค area. ๋ชจ๋“  ๊ฒฝ์šฐ์— ๊ธฐ๋ณธ ํด๋ž˜์Šค์˜ ๋ฒ„์ „์ด ๋Œ€์‹  ํ˜ธ์ถœ๋˜์—ˆ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— 0์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ณธ์งˆ์ ์œผ๋กœ ๋ฌด์—‡์„virtualํ‚ค์›Œ๋“œ๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ํŒŒ์ƒ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๊ฐ€ ํฌ์ธํ„ฐ์—์„œ ์ ์ ˆํ•˜๊ฒŒ ํ˜ธ์ถœ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ๋” ์ •ํ™•ํ•˜๊ฒŒ๋Š” ํฌ์ธํ„ฐ์˜ ์œ ํ˜•์ด ํ•ด๋‹น ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ผ ๋•Œ ์œ„์˜ ์˜ˆ์—์„œ์™€ ๊ฐ™์ด ํŒŒ์ƒ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

๊ฐ€์ƒ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ฑฐ๋‚˜ ์ƒ์†ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋‹คํ˜•์„ฑ ํด๋ž˜์Šค ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค .

๋ฉค๋ฒ„ ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ€์ƒ์„ฑ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์€ (๋Š”) ํ•ญ์ƒ 0์„ ๋ฐ˜ํ™˜ ํ•˜๋Š” ๋ฉค๋ฒ„์— ๋Œ€ํ•œ ์ž์ฒด ์ •์˜์™€ ํ•จ๊ป˜ Polygon๊ฐ์ฒด์กฐ์ฐจ ์ธ์Šคํ„ด์Šคํ™”( )๋œ ์ผ๋ฐ˜ ํด๋ž˜์Šค์˜€์Šต๋‹ˆ๋‹ค .polyarea

 

์ถ”์ƒ  ํด๋ž˜์Šค

Polygon์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋Š” ์ด์ „ ์˜ˆ์ œ ์˜ ํด๋ž˜์Šค์™€ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค . ๊ธฐ๋ณธ ํด๋ž˜์Šค๋กœ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค์ด๋ฏ€๋กœ ์ •์˜ ์—†์ด ๊ฐ€์ƒ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ˆœ์ˆ˜ ๊ฐ€์ƒ ํ•จ์ˆ˜๋ผ๊ณ  ํ•จ). ๊ตฌ๋ฌธ์€ ์ •์˜๋ฅผ =0(๋“ฑํ˜ธ ๋ฐ 0)๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถ”์ƒ ๊ธฐ๋ณธ Polygonํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// abstract class CPolygon
class Polygon {
  protected:
    int width, height;
  public:
    void set_values (int a, int b)
      { width=a; height=b; }
    virtual int area () =0;
};


์—๋Š” ์ •์˜ area๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ˆœ์ˆ˜ํ•œ ๊ฐ€์ƒ ๊ธฐ๋Šฅ=0 ์ด ๋˜๋Š” ์œผ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์ˆœ์ˆ˜ ๊ฐ€์ƒ ํ•จ์ˆ˜ ๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค ๋ฅผ ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋Š” ๊ฐœ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋งˆ์ง€๋ง‰ ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค ๋ฒ„์ „์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐœ์ฒด๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Polygon mypolygon;   // not working if Polygon is abstract base class

๊ทธ๋Ÿฌ๋‚˜ ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค ๊ฐ€ ์™„์ „ํžˆ ์“ธ๋ชจ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ชจ๋“  ๋‹คํ˜•์„ฑ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ํฌ์ธํ„ฐ ์„ ์–ธ์ด ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

Polygon * ppoly1;
Polygon * ppoly2;

๊ทธ๋ฆฌ๊ณ  ํŒŒ์ƒ(๋น„์ถ”์ƒ) ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ ์‹ค์ œ๋กœ ์—ญ์ฐธ์กฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// abstract base class
#include <iostream>
using namespace std;

class Polygon {
  protected:
    int width, height;
  public:
    void set_values (int a, int b)
      { width=a; height=b; }
    virtual int area (void) =0;
};

class Rectangle: public Polygon {
  public:
    int area (void)
      { return (width * height); }
};

class Triangle: public Polygon {
  public:
    int area (void)
      { return (width * height / 2); }
};

int main () {
  Rectangle rect;
  Triangle trgl;
  Polygon * ppoly1 = &rect;
  Polygon * ppoly2 = &trgl;
  ppoly1->set_values (4,5);
  ppoly2->set_values (4,5);
  cout << ppoly1->area() << '\n';
  cout << ppoly2->area() << '\n';
  return 0;
}

์ด ์˜ˆ์—์„œ ์„œ๋กœ ๋‹ค๋ฅด์ง€๋งŒ ๊ด€๋ จ ์œ ํ˜•์˜ ๊ฐœ์ฒด๋Š” ๊ณ ์œ ํ•œ ์œ ํ˜•์˜ ํฌ์ธํ„ฐ( Polygon*)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ๋˜๋ฉฐ ๊ฐ€์ƒ์ด๋ผ๋Š” ์ด์œ ๋งŒ์œผ๋กœ ์ ์ ˆํ•œ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๊ฐ€ ๋งค๋ฒˆ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋Š” ์ •๋ง ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๊ฐ€ ์ด ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๊ตฌํ˜„์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ์ ์ ˆํ•œ ๊ฐ€์ƒ ๋ฉค๋ฒ„์— ์•ก์„ธ์Šคํ•˜๊ธฐ Polygon์œ„ํ•ด ํŠน์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.thisPolygon

// pure virtual members can be called
// from the abstract base class
#include <iostream>
using namespace std;

class Polygon {
  protected:
    int width, height;
  public:
    void set_values (int a, int b)
      { width=a; height=b; }
    virtual int area() =0;
    void printarea()
      { cout << this->area() << '\n'; }
};

class Rectangle: public Polygon {
  public:
    int area (void)
      { return (width * height); }
};

class Triangle: public Polygon {
  public:
    int area (void)
      { return (width * height / 2); }
};

int main () {
  Rectangle rect;
  Triangle trgl;
  Polygon * ppoly1 = &rect;
  Polygon * ppoly2 = &trgl;
  ppoly1->set_values (4,5);
  ppoly2->set_values (4,5);
  ppoly1->printarea();
  ppoly2->printarea();
  return 0;
}

๊ฐ€์ƒ ๋ฉค๋ฒ„์™€ ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ์ ํŠธ์— ๊ฐ€์žฅ ์œ ์šฉํ•œ C++ ๋‹คํ˜•์„ฑ ํŠน์„ฑ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์œ„์˜ ์˜ˆ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ด์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ๊ฐœ์ฒด ๋ฐฐ์—ด ๋˜๋Š” ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๊ฐœ์ฒด์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋™์  ๋ฉ”๋ชจ๋ฆฌ, ์ƒ์„ฑ์ž ์ด๋‹ˆ์…œ๋ผ์ด์ € ๋ฐ ๋‹คํ˜•์„ฑ๊ณผ ๊ฐ™์€ ์ตœ์‹  ์žฅ์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

// dynamic allocation and polymorphism
#include <iostream>
using namespace std;

class Polygon {
  protected:
    int width, height;
  public:
    Polygon (int a, int b) : width(a), height(b) {}
    virtual int area (void) =0;
    void printarea()
      { cout << this->area() << '\n'; }
};

class Rectangle: public Polygon {
  public:
    Rectangle(int a,int b) : Polygon(a,b) {}
    int area()
      { return width*height; }
};

class Triangle: public Polygon {
  public:
    Triangle(int a,int b) : Polygon(a,b) {}
    int area()
      { return width*height/2; }
};

int main () {
  Polygon * ppoly1 = new Rectangle (4,5);
  Polygon * ppoly2 = new Triangle (4,5);
  ppoly1->printarea();
  ppoly2->printarea();
  delete ppoly1;
  delete ppoly2;
  return 0;
}

ppolyํฌ์ธํ„ฐ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Polygon * ppoly1 = new Rectangle (4,5);
Polygon * ppoly2 = new Triangle (4,5);

"์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ" ์œ ํ˜• ์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์ง€๋งŒ ํ• ๋‹น๋œ ๊ฐ์ฒด๋Š” ํŒŒ์ƒ ํด๋ž˜์Šค ์œ ํ˜•( ๋ฐ ) Polygon์„ ์ง์ ‘ ๊ฐ–๋Š” ๊ฒƒ์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค .RectangleTriangle

'๐Ÿ“ Development Study > ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

exception  (0) 2022.08.22
ํ˜•๋ณ€ํ™˜  (0) 2022.08.22
์ƒ์† / ํ”„๋ Œ๋“œ  (0) 2022.08.22
์ƒ์„ฑ์ž/์†Œ๋ฉธ์ž  (0) 2022.08.22
ํด๋ž˜์Šค(2)  (0) 2022.08.19

๋Œ“๊ธ€