블로그 이미지
SANGHO KIM

calendar

1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Notice

Tag

2018. 1. 23. 16:07 C++Language

전역변수를 선언한 경우

#include<iostream>

#include<cstring>

using std::cout;

using std::endl;


int count=1; //전역변수 정의 


class Person //class를 정의 

{

char name[20]; //name을 정의 

int age; //age를정의 

public:

Person(char* _name, int _age) //함수 Person을 정의 

{

strcpy(name, _name);

age=_age;

}

void ShowData() //함수 ShowDate를 정의 

{

cout<<count++<<"번째 Person 객체 생성"<<endl;

cout<<"이름: "<<name<<endl;

cout<<"나이: "<<age<<endl;

}

};


int main(void)

{

Person p1("Lee",13); //함수 p1 정의 

Person p2("Hong",22);//함수 p2 정의 

p1.ShowData();

p2.ShowData();

return 0;

 } 

전역변수를 선언하지 않은 경우(static변수 사용)

#include<iostream>

#include<cstring>

using std::cout;

using std::endl;


class Person //class를 정의 

{

char name[20]; //name을 정의 

int age; //age를정의 

static int count;

public:

Person(char* _name, int _age) //함수 Person을 정의 

{

strcpy(name, _name);

age=_age;   

}

void ShowData() //함수 ShowDate를 정의 

{

cout<<count++<<"번째 Person 객체 생성"<<endl;

cout<<"이름: "<<name<<endl;

cout<<"나이: "<<age<<endl;

}

};

int Person::count=1; //static 멤버 초기화 

int main(void)

{

Person p1("Lee",13); //함수 p1 정의 

Person p2("Hong",22);//함수 p2 정의 

p1.ShowData();

p2.ShowData();

return 0;

 } 


#include<iostream>

#include<cstring>

using std::cout;

using std::endl;


class AAA

{

int val;

static int n;

public:

AAA(int a=0) 

{

val=a;

n++;

}

void ShowData()

{

cout<<"val: "<<val<<endl; 

cout<<"n: "<<n<<endl; 

}

 };

 int AAA::n=1;

 

 int main(void)

 {

  AAA a1(10);

  a1.ShowData();

 

  AAA a2(20);

a2.ShowData();

 

  return 0;

 } 




'C++Language' 카테고리의 다른 글

C++언어; 상속(1)  (0) 2018.01.23
C++언어; explicit과 mutable 함수의 사용  (0) 2018.01.23
C++언어; 객체에 대한고찰  (0) 2018.01.23
C++언어(17); 클래스에서 const 사용  (0) 2018.01.23
C++언어(16); 복사 생성자  (0) 2018.01.22
posted by SANGHO KIM
2018. 1. 23. 15:49 C++Language

C++은 객체 지향의 언어이다.


클래스는 어떤 대상을 분류하기 위해 사용되는데

변수와 데이터 뿐만 아니라 함수까지 함께 분류 할 수 있다.

그 공통된 특징틀로 분류된 대상을 객체라 말한다.

그렇다면 객체와 클래스는 동의어인가?

posted by SANGHO KIM
2018. 1. 23. 13:29 C++Language

const 명령어 용도(1)

아래 case(1)과 (2)의 차이점을 설명하시오.

case(1)

int n=10;

const int* pN=&n;

case(2)

int n=10;

int* const pN=&n;

case(1)은 'n'을 상수화함. case(2)는 'pN'을 상수화함.


예제(1)

const변수의 사용; 개선 전

#include<iostream>

#include<cstring>

using std::cout;

using std::endl;


class student

{

const int id;

int age;

char name[20];

char major[30];

public:

student(int _id, int _age, char* _name, char* _major)

{

id=_id;

age=_age;

strcpy(name, _name);

strcpy(major, _major);

}

void ShowData()

{

cout<<"이름: "<<name<<endl;

cout<<"나이: "<<age<<endl;

cout<<"학번: "<<id<<endl;

cout<<"학과: "<<major<<endl; 

}

};


int main()

{

student Kim(200577065, 20, "Kim Gil Dong", "Computer Eng.");

student Hong(200512065, 19, "Hong Gil Dong", "Electronics Eng.");

Kim.ShowData();

cout<<endl;

Hong.ShowData();

return 0;

맴버 변수의 상수화; 멤버 이니셜 라이져

#include<iostream>

#include<cstring>

using namespace std;

class student

{

const int id;

int age;

char name[20];

char major[30];

public:

student(int _id, int _age, char* _name, char* _major):id(_id)

{

// id=_id;

age=_age;

strcpy(name, _name);

strcpy(major, _major);

}

void ShowData()

{

cout<<"이름: "<<name<<endl;

cout<<"나이: "<<age<<endl;

cout<<"학번: "<<id<<endl;

cout<<"학과: "<<major<<endl;

}

};

int main()

{

student Kim(200577065, 20, "Kim Gil Dong", "Computer Eng.");

student Hong(200512065, 19, "Hong Gil Dong", "Electronics Eng.");

Kim.ShowData();

cout<<endl;

Hong.ShowData();

return 0;

const 명령어 용도(2)

아래와 같이 함수를 선언하면 getArea() 함수는 const 멤버함수가 되며 다른 멤버의 값을 변경할 수 없게 됩니다. 즉, 클래스의 멤버함수가 멤버의 값을 사용하기만 하고 변경하지 못하게 할 때 const 멤버함수로 선언할 필요가 있습니다.

int getArea() const 

예제

#include<iostream>

#include<cstring>

using std::cout;

using std::endl;

class Student

{

const int id;

int age;

char name[20];

char major[30];

public:

Student(int _id, int _age, char* _name, char* _major):id(_id), age(_age)

{

strcpy(name, _name);

strcpy(major, _major);

}

void ShowData() const//읽기 전용 선언 및 잘못된 코딩을 감지

age=20; //잘못된 코딩 

cout<<"이름: "<<name<<endl;

cout<<"나이: "<<age<<endl;

cout<<"학번: "<<id<<endl;

cout<<"학과: "<<major<<endl; 

}

};


int main()

{

Student Kim(200577065, 20, "Kim Gil Dong", "Computer Eng.");

Student Hong(200512065, 19, "Hong Gil Dong", "Electonics Eng.");

Kim.ShowData();

cout<<endl;

Hong.ShowData();

return 0;

}

예제

#include<iostream>

#include<cstring>

using std::cout;

using std::endl;

class Count

{

int cnt;

public :

Count():cnt(0){}

const int* GetPtr() const

{

return &cnt;

}

void increment()

{

cnt++;

}

void ShowData() const {

ShowIntro();

cout<<cnt<<endl;

}

void ShowIntro() const {

cout<<"현재 count의 값 : "<<endl; 

}

};

int main()

{

Count count;

count.increment();

count.ShowData();

 } 


#include<iostream>

#include<cstring>

using std::cout;

using std::endl;

class Count

{

int cnt; //cnt를 정수로 정의한다. 

public : 

Count():cnt(0){} //cnt값= 0;. 

const int* GetPtr() const //GetPtr

{

return &cnt;

}

void increment() //increment 함수를 정의함. 

{

cnt++;

}

void ShowData() const //ShowData 함수를 정의함. 

ShowIntro(); //compile 에러가 발생할 수 있음. 

cout<<cnt<<endl;

}

void ShowIntro() const //ShowIntro 함수를 정의한다. 

{

cout<<"현재 count의 값 : "<<endl; 

}

};


int main()

{

Count count;

count.ShowData();

count.increment();

count.ShowData();

}  


#include<iostream>

using std::cout;

using std::endl;


class AAA //AAA 클래스 정의 

{

int num;

public :

AAA(int _num):num(_num) {} //num을 _num으로 변경 

void Add(int n) //num을 조작하는 함수, compile 에러가 예상됨 

{

num+=n;

}

void ShowData()

{

cout<<num<<endl; //num을 출력함 

}

 };

 int main()

 {

  const AAA aaa(10);

  aaa.Add(10); //compile 에러 

  aaa.ShowData(); //compile 에러 

   

  return 0;

 } 

위 코드에서 aaa.Add(10)과 ShowData()에서 compile에러가 발생하는 원인은 무엇인가?

#include<iostream>

using std::cout;

using std::endl;


class AAA //AAA 클래스 정의 

{

int num;

public :

AAA(int _num):num(_num) {} //num을 _num으로 변경 

void Add(int n) //num을 조작하는 함수, compile 에러가 예상됨 

{

num+=n;

}

void ShowData() const

{

cout<<num<<endl; //num을 출력함 

}

 };

 int main()

 {

  const AAA aaa(10);

 // aaa.Add(10); //compile 에러 

  aaa.ShowData(); //compile 에러 

   

  return 0;

 } 

const 함수는 cosnt 함수 이외의 함수는 호출이 불가능하다.

#include<iostream>

#include<cstring>

using std::cout;

using std::endl;

class AAA

{

int num;

public :

AAA(int _num) : num(_num) { }

void ShowData() 

{

cout<<"void ShowData() 호출"<<endl;

cout<<num<<endl;

}

void ShowData() const 

{

cout<<"void ShowData() const 호출"<<endl;

cout<<num<<endl;

}

};

int main()

{

const AAA aaa1(20);

AAA aaa2(70);

aaa1.ShowData();

aaa2.ShowData();

return 0; 

위 코드를 통해서 오버로딩 되는 원리를 파악하라.

posted by SANGHO KIM
prev 1 2 3 4 5 6 7 8 ··· 23 next