본문 바로가기

[C++]정적멤버

반응형

>정적멤버 = 전역변수와 비슷한 것.

클래스 안에 들어가는 것.

정적맴버는 모든 객체가 공유하는 멤버변수다.

클래스안에 들어가는 맴버변수 이기는 하다.

   

 >형식 

clas A

{

   

static int val;

   

}

   

int A::val = 0; //class 밖에서 정적 맴버 변수를 초기화해야 한다.

//class를 만들기 전에 만들어진다.?



맴버변수는 stack에 저장

정적멤버는 데이터 영역에 저장

코드는 stack에 생성되어 정적멤버를 바라보는 것이다.

여러객체가 정적멤버를 바라보고 있는 것이다.


#include <iostream>

#include <string>

   

using namespace std;

   

     

   

class Student

{

public:

  string name;

  int sNo;

   

  Student(const string& name_arg, int stdNumber);

  ~Student();

   

public:

   

  static int student_count;

  static void PrintStdCount();

   

};

   

int Student::student_count = 0;

   

void Student::PrintStdCount()

{

  cout << "Student 객체수=" << student_count << "\n";

}

   

   

Student::Student(const string& name_arg, int stdNumber)  //생성자

{

  student_count++;

   

  name = name_arg;

  sNo = stdNumber;\

}

   

   

Student::~Student()    //소멸자

{

  student_count--;

}

   

   

void Func()

{

  Student std1("Bill",342);  //std객체 생성

  Student std2("James" , 214);  //std객체 생성

   

  Student::PrintStdCount();  /객체3  Func함수가 사라짐.

   

}

   

int main()

{

  Student::PrintStdCount();  //Student 클래스에 있는 함수호출

          //public , 정적멤버라 바로 호출가능 >>객체를 만들 필요없이 접근가능.

  Student std("Jeffrey" , 123);  //객체 1 

   

  Student::PrintStdCount();

   

  Func();  //객체

   

  Student::PrintStdCount();  //1

    

  return 0;

   

}

   

   

정적멤버는 바로 호출가능 객체를 만들 필요없이 접근가능.
정적멤버는 객체의 소유가 아니라 클래스의 소유라는  파악.

  

>하나의 파일을 두 개의 소스파일과 하나의 헤더파일로 나눠서 컴파일하기.

일단 밑에와 같이 나눈 후에 리눅스에서는 g++ -o main main.cpp student.cpp를 입력하면 되고 윈도우에서는 cl main.cpp student.cpp로 입력하면 컴파일 된다. 실행파일은 뒤에 있는 파일로 컴파일된다. 여기서는 student.exe로 컴파일 된다.


<헤더파일>

   

//student.h

   

#ifndef STUDENT_H

#define STUDENT_H

#include <string>

   

using namespace std;

   

class Student

{

  public:

    Student(const string& name_arg, int stdNumber);

    ~ Student();

   

    static int student_count;

    static void PrintStdCount();

   

  private:

    string name;

    int sNo;

};

   

   

   

   

#endif

   

   

   

<main.cpp 파일>

   

#include <iostream>

#include <string>

#include "student.h"

   

using namespace std;

   

void Func()

{

  Student std1("Bill"342);

  Student std2("James"214);

   

  Student::PrintStdCount();

}

   

int main()

{

    

  Student::PrintStdCount();

   

  Student std("Jeffrey",123);

  Student::PrintStdCount();

   

  Func();

   

  Student::PrintStdCount();  

   

  return 0;

}

   

   

<student.cpp 파일>

   

//student.cpp

   

#include "student.h"

#include <iostream>

#include <string>

   

int Student::student_count = 0;

   

void Student::PrintStdCount()

{

  cout<<"Student 객체 = "<<student_count <<"\n";

}

   

Student::Student(const string& name_arg, int stdNumber)

{

  student_count++;

   

  name = name_arg;

  sNo = stdNumber;

}

   

Student::~Student()

{

  student_count--;

}

   

   

   

   

   

   

   

반응형
-->