카테고리 없음

202208026 이종윤 c프로그래밍 10주차과제

jong133 2024. 11. 5. 13:42

new라는 연산자를 사용하는 프로그래밍 언어를 예를들어 설명해줘라고 리튼에게 물어봤다.

Java: Java에서는 new 연산자를 사용하여 객체를 생성할 수 있습니다. Java는 자동 메모리 관리를 제공하므로, 명시적으로 메모리를 해제할 필요는 없습니다. java class MyClass { MyClass() { System.out.println("객체 생성됨"); } } public class Main { public static void main(String[] args) { MyClass obj = new MyClass(); // new 연산자 사용 } } 이 코드에서 new MyClass()는 MyClass의 새로운 객체를 생성합니다. C#: C#에서도 new 연산자를 사용하여 객체를 생성합니다. 구조는 Java와 유사합니다. csharp using System; class MyClass { public MyClass() { Console.WriteLine("객체 생성됨"); } } class Program { static void Main() { MyClass obj = new MyClass(); // new 연산자 사용 } } 이처럼 new 연산자는 다양한 프로그래밍 언어에서 객체를 생성하는 데 사용되며, 각 언어의 메모리 관리 방식에 따라 다르게 작동할 수 있습니다.
프로그래밍언어에서 동적 메모리 할당을 예를들어 12살에게 설명해주라고 뤼튼에게 물어봤다.
컨트롤h를 눌러서 바꿀예를 위에다가 쓰고 바꿀소스를 밑에다가 적어 모두바꾸기를하면 다 바뀐다.
c++에서 변수를 상수로 바꾸는 방법

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

 

Smile Han

 

www.youtube.com

 

변수를 상수로 바꾸는걸 직접 실습해보았다.

#include <iostream>
class Dog{
int age; //private 생략함
public:
int getAge() const;
void setAge(int a){age=a;}
void view() {std::cout<<"나는 view";}
};
int Dog::getAge() const
{
view(); // 오류 ①
return (++age); // 오류 ②
}
int main()
{
Dog happy;
happy.setAge(5);
std::cout<<happy.getAge();
return 0;
} 오류를 수정해줘

답변

주어진 C++ 코드에서 발생하는 오류를 수정하겠습니다. 오류는 주로 getAge() 함수에서 발생합니다. 아래에 수정된 코드를 제공하겠습니다.

수정된 코드
cpp


#include <iostream>

class Dog {
    int age; // private 생략함
public:
    int getAge() const; // const 멤버 함수
    void setAge(int a) { age = a; }
    void view() const { std::cout << "나는 view\n"; } // const로 수정
};

int Dog::getAge() const {
    view(); // 이제 오류가 없음
    return age; // 단순히 age를 반환
}

int main() {
    Dog happy;
    happy.setAge(5);
    std::cout << happy.getAge(); // 5가 출력됨
    return 0;
}
수정 사항 설명
view() 메서드를 const로 수정:

getAge()가 const로 선언된 멤버 함수이므로, 비-const 멤버 함수를 호출할 수 없습니다. view() 메서드를 const로 변경하여 getAge()에서 호출할 수 있도록 했습니다.
cpp


void view() const { std::cout << "나는 view\n"; }
getAge()에서 age 값을 증가시키지 않도록 수정:

getAge()가 const로 선언되어 있으므로, age의 값을 수정할 수 없습니다. 따라서 return (++age);를 return age;로 변경하여 현재의 age 값을 반환하도록 했습니다.
이제 수정된 코드가 오류 없이 정상적으로 작동하며, happy.getAge()를 호출하면 5가 출력됩니다.

메모리를 동적으로 할당할때를때문에 포인터개요를 알아야된다.

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

 

Smile Han

 

www.youtube.com

x와 x의 주소
주소가 매번다르다.

주소는 포인터변수에 저장할수있어서 px앞에 *를 붙일수있다.포인터자료를 만드는방법은 주소와 자료형사이에 별포를 단다.

요약 이 프로그램은 변수 x의 값, 메모리 주소, 그리고 포인터 px가 가리키는 값을 출력합니다. 포인터의 사용법을 이해하는 데 도움이 되는 간단한 예제입니다.
포인터변수는 어떤변수의 주소를 지시하고있다.

가져올때 px앞에 *만 붙히면 가져올수있다.

출처: https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

포인터변수의 자료형이 무슨의미야?라고 뤼튼에게 물어보았다.

요악하자면 포인터 변수의 자료형은 포인터가 가리키는 데이터의 타입을 나타내며, 메모리 접근, 데이터의 해석 및 타입 안전성에 영향을 미칩니다. 올바른 자료형을 사용함으로써, 프로그래머는 메모리를 효율적이고 안전하게 관리할 수 있습니다.
동적메모리를 사용하는이유=프로그램이 끝날때까지 값을 유지하고싶다,프로그램을 실행할때 메모리의 양을 결정해야되겠다.//시험에 꼭나온다.

출처: https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

정적메모리할당은 지금까지 우리가 했던것이고 오늘배울것이 동적 메모리 할당이다.new랑 delete를 잘해석해서 외워두자

출처: https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

동적메모리를 할당을 하게되면 소스없이 주소를 가지고 놀아야되서 포인터에다가 저장을해야된다.
초기값을 줄려면 int가로안에다가 2같은 숫자를 쓰면된다.
첫번째 방에 주소를 저장하고있다.
delete를 반드시할당해야되는데 대괄호를 써야된다.
힙에 100을 지정해서 주소의값도 100으로 나온다.
주어진 C++ 코드는 동적 메모리 할당을 사용하여 사용자가 입력한 숫자를 저장하고 출력하는 프로그램입니다. 코드의 각 부분을 자세히 설명하겠습니다.
이 프로그램은 사용자가 입력한 숫자 개수만큼 동적으로 메모리를 할당하고, 그 숫자들을 입력받아 출력한 후, 사용이 끝난 메모리를 해제합니다. 포인터와 동적 메모리 할당의 기본 개념을 이해하는 데 도움이 되는 코드입니다.
포인터객체는 .이 아니고 화살표로 접근한다.

출처: https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

이 프로그램은 사용자가 입력한 숫자 개수만큼 동적으로 메모리를 할당하고, 그 숫자들을 입력받아 출력한 후, 사용이 끝난 메모리를 해제합니다. 포인터와 동적 메모리 할당의 기본 개념을 이해하는 데 도움이 되는 코드입니다.
이 프로그램은 Dog 클래스를 사용하여 동적으로 10개의 Dog 객체를 생성하고, 각 객체의 나이를 설정한 다음 출력하는 기능을 수행합니다. 동적 메모리 할당과 객체 배열의 기본 개념을 이해하는 데 도움이 되는 코드입니다. 또한, 메모리 해제를 통해 메모리 누수를 방지하는 좋은 예시입니다.
dp가 첫번째강아지의 주소를 가지고있다. 중간중간에 호출할때마다 this가 나오는데 이 this는 접근을하게한다. 동적으로 할당하게되면 heap이라는 공간에 할당하게 되고,new연산자를 이용하면첫번째 주소가 튀어나오는데 이 주소를 point에다가 저장을하고 실제로 사용할때는 배열처럼 사용하면된다.
const를 사용해 보기 더좋아졌다.