질문드립니다ㅠㅠ
209
4 asked
비전공자라 많이 서툰지라.. 열심히 배우기 위해서 질문드려봅니다!! ㅠㅠ
이번에 벡터의 성분 합을 직접 표현 해보고 싶어서, 교수님이 알려주신 다양한 방법들을 통하여 아래와 같은 코드를 짰습니다.
#include <iostream>
#include <cstdarg>
using namespace std;
class y_vector
{
private:
int m_size;
int *vector;
public:
y_vector(const int& size)
: m_size(size)
{
vector = new int[m_size];
}
~y_vector()
{
delete[] vector;
}
y_vector& set_array(int value, ...)
{
va_list list;
va_start(list, value);
for (int i = 0; i < m_size; i += 1)
{
if (i == 0) { vector[i] = value; continue; }
else { vector[i] = va_arg(list, int); }
}
va_end(list);
return *this;
}
void print_array()
{
for (int i = 0; i < m_size; i += 1)
{
cout << vector[i] << " ";
}
cout << endl;
}
bool is_same_size(const y_vector &v)
{
return v.m_size == this->m_size ? true : false;
}
y_vector& operator + (const y_vector& v)
{
y_vector dum(this->m_size);
if (is_same_size(v))
{
for (int i = 0; i < this->m_size; i += 1)
{
dum.vector[i] = this->vector[i] + v.vector[i];
cout << dum.vector[i] << endl; // 함수 내부에서는 잘되는 지 확인하려고 넣어둠
}
}
else { cout << "Size is not Same" << endl; return *this; }
}
};
int main()
{
y_vector yh_1(5);
y_vector yh_2(5);
y_vector yh_3(6);
yh_1.set_array(3, 2, 1, 4, 6);
yh_2.set_array(1, 1, 3, 9, 12);
yh_3.set_array(2, 8, 3, 4, 7, 5);
y_vector yh_4 = yh_1 + yh_2;
yh_4.print_array();
return 0;
}
위에 보면 체이닝을 위하여
+ 산술자를 오버로드 한 함수와 벡터 성분을 결정지어주는 set_array 함수를 y_vector& 타입으로 받아주었습니다.
그러다 보니, + 산술자 함수의 리턴 값으로 어떠한 클래스를 설정해주기 위해 함수 내부적으로 임시적인 클래스의 인스턴스(dum)을
생성해 주었는데,
해당 영역에서 나가게 될 경우 소멸자에 의해 동적 할당 된 vector사라지다 보니,
yh_4.print_array();에서 쓰레기 값을 출력하고,
프로그램에서 런타임 에러가 계속 발생하게 됩니다..
입력 값으로 들어가게 된 인스턴스와 같이 연산이 되는
this에 해당하는 인스턴스의 값을 바꾸지 않고(const로 생각하여)
다른 클래스를 생성하여 반환하는게 가능 할까요..? 동적할당이다보니 불가능할것 같기도 하고,
제가 많이 알지 못하다 보니 할수없는 것을 잡고있는건지, 제가 못하는 건지도 모르겠어서 질문드립니다..
Answer 2
1
안녕하세요? 새로운 시도를 하시는 것이 좋아보이는데 강의의 범위를 벗어나는 내용까지 모두 알려드리기는 어렵다는 점이 저도 아쉽게 생각이 되네요. c++에 수학 라이브러리가 여러가지가 있는데 그래픽스 관련 라이브러리에서는 glm을 많이 쓰고 그 외에는 Eigen을 많이 씁니다. 게임쪽을 좋아하신다면 언리얼이 코드를 공개하고 있으니 언리얼 코드를 보시는 것도 공부에 도움이 될 것 같습니다. 참고로 glm의 vector 구현된 부분 링크를 남겨드리니 참고하세요. 아마 생각하던 것 보다는 복잡하다고 느껴지실 텐데 조금 찬찬히 보시면 눈에 들어오기 시작할겁니다.
https://github.com/g-truc/glm/blob/master/glm/detail/type_vec2.inl
변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠
1
461
1
메모리 주소 10진수로 출력
1
650
1
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
1
496
1
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
1
529
1
메모리 주소에 관한 질분
0
676
1
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
0
546
1
형변환 오버로딩에서 const 관련 질문이 있습니다.
0
439
1
Digit 뒤에 reference를 사용하는 이유
0
504
1
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
0
319
1
dat파일이...
0
534
1
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
0
640
1
복사 생성자 관련 질문이 있습니다.
0
450
1
수업 중 궁금한점이 있습니다.
1
386
1
라이브러리자체가 이해가 되지 않습니다.
0
557
1
마지막 예제 질문
0
299
1
증감연산자 위치에 따른 수행 순서 질문입니다.
0
371
1
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
1
408
1
friend함수 관련 질문이 있습니다.
0
308
1
operator+ 정의부분에서 궁금한 것이 있습니다.
0
443
1
3분 17초 질문
0
346
1
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
0
443
1
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
0
440
2
const Something &st에서 const를 빼면 안되나요?
0
296
1
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
1
489
1

