c++고수님들 봐주세요

shtlcks의 이미지

#include<iostream>
using namespace std;
 
class cal
{
private:int add;
 
public:
	void Add(double a,double b);
 
	   void chance();
	   void input();
};
 
void cal::Add(double a, double b){
 
	add++;
	cout<<a<<"+"<<b<<"="<<a+b<<endl;
 
}
void cal ::chance(){
	cout<<"더한 횟수"<<endl;
	cout<<add<<endl;
}
void cal::input(){
 
	  add=0;///// 이부분이요!!!!!!!!!!!!!!!!!!!!!!!!
 
}
void main(){
	cal x;
	x.input();
	x.Add(3.2,2.4);
 
 
	x.chance();
}

///// 이부분이요!!!!!!!!!!!!!!!!!!!!!!!!이부분이라고 쓴곳 add=0;이라고하면 chance 함수로 가서 결과에 1 나오거든요
근데 int add=0;이라고하면 chance함수의 add값에 쓰레기값 들어가서 쓰레기값이 나오네요..왜이런지 설명좀 해주세요

liush79의 이미지

void cal::input()
{
add = 0;
}

이라고하는 것은 원래
void cal::input()
{
this.add = 0;
}
이런 의미입니다.

만약 this를 안쓰면 컴파일러가 알아서 this.를 붙여주기때문에 add = 0; 이라고 써도 됩니다.

하지만 int add = 0; 이라고 쓰면 이것은 사용자가 add를 로컬변수로 새로 설정했기때문에
this.add 와는 다른변수를 만든거죠..

그러니까 .. 아래 두개는 다른 add 변수입니다.
void cal::input()
{
int add = 0;
this.add = 0;
}

drinkme의 이미지

int add = 0;

이라고 하면, 멤버변수의 add를 가리키는게 아니라, 지역변수 add를 만들어서 0으로 설정하고 있는 거임.
즉, 멤버변수 add는 안바뀌었음.