개발/c | c++

C++ 상속

멍멍콩 2022. 1. 13. 17:38

# 상속 override

#include <stdio.h>
#include <string.h>

class Human
{
protected:
    char name[20];
    int age;
public:
    Human(const char *aname, int aage)
    {
        strcpy(name, aname);
        age=aage;
    }
    void intro()
    {
        printf("이름=%s, λ‚˜μ΄=%d\n",name,age);
    }
};

class Student : public Human
{
protected:
    int stunum;
public:
    Student(const char *aname, int aage, int astunum) : Human(aname,aage)
    {
        stunum = astunum;
    }
    void study()
    {
        printf("2*2=4, 3*2=6\n");
    }
    void intro()
    {
        printf("%dν•™λ²ˆμ€ %sμž…λ‹ˆλ‹€.\n",stunum,name);
    }
};

class Graduate : public Student
{
protected:
    char thesis[32];
public:
    Graduate(const char *aname, int aage, int astunum, const char *athesis):Student(aname,aage,astunum)
    {
        strcpy(thesis, athesis);
    }
    void research()
    {
        printf("%s을 μ—°κ΅¬ν•˜κ³  논문을 μŠ¨λ‹€.\n",thesis);
    }
};

int main()
{
    
    Human kim("김퐁핑",30);
    kim.intro();
    Student han("ν•œλΆ•λΆ•",22,12345);
    han.intro();
    
   Graduate moon("문퐁퐁",23,9333,"κ²Œμž„λ°©μƒκΆŒλΆ„μ„");
   moon.research();
}

 

# 닀쀑상속

#include <stdio.h>

class A
{
protected:
    int a;
public:
    A(int aa) {a=aa;}
};

//2쀑 상속을 ν”Όν•˜κΈ° μœ„ν•΄ Aλ₯Ό κ°€μƒκΈ°λ°˜ 클래슀둜 μ§€μ •ν•œλ‹€.
//κ°€μƒκΈ°λ°˜ 클래슀둜 μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ D의 aκ°€ B::a인지, C::a인지
//ν—·κ°ˆλ¦¬κ³ , μ‹€μˆ˜ν•  수 μžˆμœΌλ―€λ‘œ μ£Όμ˜ν•  것!
class B : virtual public A
{
protected:
    int b;
public:
    B(int aa, int ab) : A(aa) {b=ab;}
};

class C : virtual public A
{
protected:
    int c;
public:
    C(int aa,int ac) : A(aa) {c=ac;}
};

class D : public B, public C
{
protected:
    int d;
public:
    D(int aa,int ab,int ac,int ad) : A(aa), B(aa,ab), C(aa,ac) {d=ad;}
    void fD()
    {
        b=1;
        c=2;
        a=3;
    }
};

int main()
{
    D d(1,2,3,4);
}

 

# 포함과 private 상속(κ΅¬ν˜„μƒμ†)

  ( // 포함 μ½”λ“œ )

#include <stdio.h>
#include <string.h>

class Date
{
protected:
    int year, month, day;
public:
    Date(int y, int m, int d)
    {
        year = y;
        month = m;
        day = d;
    }
    void outDate()
    {
        printf("%d,%d,%d",year,month,day);
    }
};

class Product : private Date
{
private:
    char name[64];
    char company[32];
    int price;
    //Date validto; λ””ν΄νŠΈ μƒμ„±μžλ‘œ validto객체λ₯Ό λ§Œλ“¬
public:
    Product(const char *aname, const char *acompany, int y, int m, int d, int aprice) : Date(y,m,d)
 // Product(const char *aname, const char *acompany, int y, int m, int d, int aprice) : validto(y,m,d)
    {
        strcpy(name,aname);
        strcpy(company,acompany);
        price=aprice;
    }
    void outProduct()
    {
        printf("이름:%s\n",name);
        printf("μ œμ‘°μ‚¬:%s\n",company);
        printf("μœ νš¨κΈ°κ°„:");
        outDate();
        //validto.outDate();
        puts("");
        printf("가격:%d\n",price);
    }
};

int main()
{
    Product shrimp("μƒˆμš°κΉ‘","농심",2020,8,15,900);
    shrimp.outProduct();
}

 

# 쀑첩 클래슀

#include <stdio.h>
#include <string.h>

class Product
{
private:
    char name[24];
    char company[32];
    int price;

    //Date ν΄λž˜μŠ€λŠ” μ™ΈλΆ€λ‘œ μ•Œλ €μ§€μ§€ μ•ŠλŠ” Productλ‚΄μ˜ μ§€μ—­ν΄λž˜μŠ€
    class Date
    {
    protected:
        int year, month, day;
    public:
        Date(int y, int m, int d)
        {
            year = y;
            month = m;
            day = d;
        }
        void outDate()
        {
            printf("%d,%d,%d",year,month,day);
        }
    };

Date validto;

public:
    Product(const char *aname, const char *acompany, int y, int m, int d, int aprice) : validto(y,m,d)
    {
        strcpy(name,aname);
        strcpy(company,acompany);
        price=aprice;
    }
    void outProduct()
    {
        printf("이름:%s\n",name);
        printf("μ œμ‘°μ‚¬:%s\n",company);
        printf("μœ νš¨κΈ°κ°„:");
        validto.outDate();
        puts("");
        printf("가격:%d\n",price);
    }
};

int main()
{
    Product shrimp("μƒˆμš°κΉ‘","농심",2020,8,15,900);
    shrimp.outProduct();
}

 

 

 

좜처 : κΉ€μƒν˜•, C++νŠΈλ ˆμ΄λ‹, ν•œλΉ›μ•„카데미, 2018.03.25