미안하다 질문 하려고 어그로 끌었다
클래스 이름이 Class 일때
Class a;
Class a();
랑 차이가 뭐냐?
연산자 오버로딩 해놨는데 왜
Class a;
class c= a+a; 하면 오류 안나는데
Class a();
Class c= a+a; 하면 오류나냐?
코드 예시
#include <cstdlib>
#include <cmath>
#include <cstdio>
#include <ctime>
class Matrix
{
public:
int matrix;
Matrix()
{
for (int i = 0; i < 27; i++)
{
matrix = rand() % 9;
}
}
Matrix(int a)
{
for (int i = 0; i < 27; i++)
{
matrix = rand() % 9;
}
}
};
Matrix operator+(Matrix& a, Matrix& b);
Matrix operator+(Matrix& a, Matrix& b)
{
return Matrix(a.matrix + b.matrix);
}
void main()
{
srand(time(0));
Matrix f();//Matrix f
Matrix v();//Matrix v
Matrix c = f + v;
컴파일러가 a()를 함수의 식별자라고 인식할걸
기억이 가물가물해서 아닐 수도 있어 ㅇㅅㅇ
디폴트 컨스트럭터를 호출할땐 그래서 ()쓰면 안됨
a(인수,인수)도?
컴파일러가 Matrix f();를 함수 원형 선언으로 봄. 객체 정의라고 안보고, 컴파일러는 f를 함수의 식별자로 인식하는데 함수에게서 연산자 오버로딩 함수를 찾우니까 오류가 나는거지 근데 매개변수가 있는 생성자는 데이터 타입이 아니라 값을 넘겨서 구분함 하튼 그래서 Default 생성자 호출할 땐 그래서 () 빼야함 안그러면 오류난다.
답변 고마워
실제 코드 예시 가져와보셈
가져옴
https://stackoverflow.com/a/6770187
고마워