본문 바로가기

카테고리 없음

2024000066 11주차 수업시간과제

 

함수 오버로딩(중첩)을 지원하는 언어를 예를들어 알려달라고 해보았다.

객체지향언어의 4가지 특징

#include <iostream>
#include <string>
using namespace std;

// 추상 클래스
class Shape {
public:
    virtual void draw() = 0; // 순수 가상 함수
    virtual double area() = 0; // 순수 가상 함수
};

// Circle 클래스: Shape를 상속받음
class Circle : public Shape {
private:
    double radius; // 캡슐화: 원의 반지름

public:
    Circle(double r) : radius(r) {} // 생성자

    void draw() override { // 다형성: 메서드 오버라이딩
        cout << "원 그리기" << endl;
    }

    double area() override { // 다형성: 메서드 오버라이딩
        return 3.14 * radius * radius;
    }
};

// Rectangle 클래스: Shape를 상속받음
class Rectangle : public Shape {
private:
    double width; // 캡슐화: 직사각형의 너비
    double height; // 캡슐화: 직사각형의 높이

public:
    Rectangle(double w, double h) : width(w), height(h) {} // 생성자

    void draw() override { // 다형성: 메서드 오버라이딩
        cout << "직사각형 그리기" << endl;
    }

    double area() override { // 다형성: 메서드 오버라이딩
        return width * height;
    }
};

// 메인 함수
int main() {
    Shape* shape1 = new Circle(5.0); // Circle 객체 생성
    Shape* shape2 = new Rectangle(4.0, 6.0); // Rectangle 객체 생성

    shape1->draw(); // 다형성: 원 그리기
    cout << "원의 면적: " << shape1->area() << endl; // 면적 계산

    shape2->draw(); // 다형성: 직사각형 그리기
    cout << "직사각형의 면적: " << shape2->area() << endl; // 면적 계산

    delete shape1; // 메모리 해제
    delete shape2; // 메모리 해제

    return 0;
}

객체지향언어의 특징을 가지는 c++소스 예제

자동형 변환을 영어로 코어션 이라고 한다.

컴파일시간엔 왼쪽 2개가 실행되고, 실행 될떈 virtual functon이 실행된다.

프로그래밍 언어에서 괄호들의 사용처.

자료형에따라 그에 맞는 자료형add로 가서 함수 사용함. (함수중첩) 같은 기능이지만,

이름만 다르다 add=int,double 둘다 상관x

자료형은 똑같고, 리턴형만 다른 경우엔 오버로드가 되지 않는다.(같은 이름은 가능지지만, 자료형이 같으면 컴파일러 입장에서 어디로 가야할지 몰라서 오류가 걸린다.) _병렬구조

cntl+m+o= 소스접기

cntl+m+l= 소스 피기

c언어와c++차이.(오버로딩)

아까와 다르게, 자료형이 다른것이 아닌, 자료의 갯수가 달라도 함수 중첩이 가능하다.

함수 중첩이 가능한 2가지 경우이다.(매개변수 형이다른경우, 매개변수 개수가 다른경우)시험에 매번 나온담

2개를 합침(오버로딩 예제) 같은이름의 함수를 하나의 소수에서 여러번 쓸 수 있다.

1단계 Dog

2단계 멤버변수 만들기

3단계. geter,seter만들기

4단계

5.매개변수 값을 넣음으로 값이 찍힘. 

생성자는 변수와 같은 이름이다.(Dog)

생성자를 만듦으로써 객체가 만들어지면 자동으로 나오게된다.(쓰레기값x)

소멸자는 여러개 만들 수가 없다.

밖으로 끄집어내기

끄집어 낸후, {}지우고, 세미콜론 붙이기.

초깃값이 있으면 매개변수 이있는 함수 호출, 없으면 없는거 호출.

디폴트인자를 쓰는 프로그래밍언어의 예를 알려달라고 해봤다.

디폴트 인자를 줌으로써 값이 없을떄도 실행가능할 수 있게된다.

디폴트인자를 주려면 2개라면 2개다 줘야한다.

디폴트인자는 선언에만 쓰고, 정의부에는 쓰지 않는다.(정의와 선언을 다른곳에서 할떄) 시험에 나옴

디폴트 인자 사용.

밖으로 뺴기.

1단계

a=age는 촌티나니까 age, this->age=age로 쪼금 폼나게 고침.

3단계 이름도 만들기위해

소스 폼나게 작성.

간단하게 객체를 만들어 나이와, 이름을 입력하고 결과를 확인하는 코드

코코와 뽀삐의 정보 찍어내는 소스.

생성자 만들기

디폴트인자를 가지는 생성자로 소스 찍어보기 주의할것은 위쪽을 주석처리해서 중복 하지 않게 해야함.

소스 폼나게 바꾸기

get은 값을 대부분 유지하기에, const를 써서 바뀌지 않게끔 하는것이 좋다.

밖으로뺴기

생성자 뺴기

#include <iostream> // 입출력을 위한 라이브러리 포함
#include <string>   // 문자열을 사용하기 위한 라이브러리 포함

class Dog { // Dog 클래스 정의
private:
    int age; // 강아지의 나이를 저장하는 private 변수
    std::string name; // 강아지의 이름을 저장하는 private 변수
public:
    // 생성자 선언: 기본값으로 나이를 1, 이름을 "강아지"로 설정
    Dog(int age = 1, std::string name = "강아지");

    int getAge() const; // 나이를 반환하는 메서드 선언
    void setAge(int age); // 나이를 설정하는 메서드 선언
    std::string getName() const; // 이름을 반환하는 메서드 선언
    void setName(std::string name); // 이름을 설정하는 메서드 선언
};

// 생성자 정의: 인자로 받은 age와 name 값을 멤버 변수에 저장
Dog::Dog(int age, std::string name) {
    this->age = age; // this 포인터를 사용하여 멤버 변수에 인자 값을 할당
    this->name = name; // this 포인터를 사용하여 멤버 변수에 인자 값을 할당
}

// getAge 메서드 정의: 나이를 반환
int Dog::getAge() const { return age; }

// setAge 메서드 정의: 나이를 설정
void Dog::setAge(int age) { this->age = age; }

// getName 메서드 정의: 이름을 반환
std::string Dog::getName() const { return name; }

// setName 메서드 정의: 이름을 설정
void Dog::setName(std::string name) { this->name = name; }

// main 함수: 프로그램의 시작점
int main()
{
    Dog coco; // 기본 생성자를 사용하여 coco 객체 생성 (age=1, name="강아지")
    Dog happy(3, "해피"); // 나이가 3이고 이름이 "해피"인 happy 객체 생성

    // coco 객체의 이름과 나이를 출력
    std::cout << coco.getName() << coco.getAge() << std::endl;

    // happy 객체의 이름과 나이를 출력
    std::cout << happy.getName() << happy.getAge() << std::endl;

    coco.setName("코코"); // coco 객체의 이름을 "코코"로 변경
    coco.setAge(3); // coco 객체의 나이를 3으로 변경

    // 변경된 coco 객체의 이름과 나이를 출력
    std::cout << coco.getName() << coco.getAge() << std::endl;

    return 0; // 프로그램 종료
}

ai에게 주석을 달아 설명해달라고 해보았다.