티스토리 뷰

1. 함수 중복 조건과 예제6-2(소스코드, 실행결과, 주석) 

소스코드, 주석

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
 
int sum(int a, int b) { // a에서 b까지 합하기
    int s = 0;
    for(int i=a; i<=b; i++
        s += i;
    return s;
}
 
int sum(int a) { // 0에서 a까지 합하기
    int s = 0;
    for(int i=0; i<=a; i++
        s += i;
    return s;
}
 
int main() {
    cout << sum(35<< endl;  // 3~5까지의 합을 구하여 리턴 , 파라미터가 두개인 함수 sum 
    cout << sum(3<< endl;     // 0~3까지의 합을 구하여 리턴, 파라미터가 하나인 함수 sum 
    
    system("pause");
}
 
cs
실행결과



2. 디폴트 매개변수 선언조건과 규칙, 호출 예 (예제 6-3 소스코드, 실행결과, 주석)

소스코드, 주석

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
#include <iostream>
#include <string>
using namespace std;
 
// 원형 선언
void star(int a=5);
void msg(int id, string text="");
 
// 함수 구현
void star(int a) {               // 파라미터를 넘겨주지 않을 경우 a는 원형에 선언된대로 5로 초기화 됨 
    for(int i=0; i<a; i++cout << '*';      // 변수 a의 값만큼 별을 출력하는 반복문 
    cout << endl;
}
 
void msg(int id, string text) {    // id값만 받을 경우 원형을 선언한대로 text는 ""로 초기화 됨 
    cout << id << ' ' << text << endl;
}
 
int main() {
    star(); // star(5);와 동일, 별을 5개 출력 
    star(10);  // star 함수에 파라미터 값으로 10을 넘겨줌 
 
    msg(10); // star(10, "");과 동일, int값만 파라미터로 넘겨줄 경우 text는 ""으로 초기화 
    msg(10"Hello"); // text가 Hello로 초기화 
    
    system("pause"); 
}
 
cs


실행결과




3. 디폴트 매개변수를 이용하여 함수 간소화

   (1) 예제1 (예제 6-5 소스코드, 실행결과)

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
void fillLine(int n = 25char c = '*');
 
void fillLine(int n, char c) { 
    for(int i=0; i<n; i++
        cout << c;
    cout << endl;
}
 
int main(int argc, char *argv[])
{
    fillLine(); 
    fillLine(10'%'); 
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
cs

실행결과

   (2) 예제2 (예제 6-6 소스코드, 실행결과)

소스코드

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
32
33
34
35
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
class MyVector{
          
public:
    int *p;
    int size;
 
    MyVector(int n = 100) { 
        p = new int [n];
        size = n;
    }
    ~MyVector() { delete [] p; }
};
 
 
int main(int argc, char *argv[])
{
    MyVector *v1, *v2;
    v1 = new MyVector(); 
    cout << v1->size << "개의 배열 생성" << endl
    
    v2 = new MyVector(1024); 
    cout << v2->size << "개의 배열 생성" << endl
    
    delete v1;
    delete v2;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
 

실행결과

4. static 멤버와 non-static 멤버 비교

non-static멤버는 선언을 할 때

class Sample {

   int n;

   void g() {...}

}

이런식으로 선언을 하며 객체마다 별도 존재하므로 인스턴스 멤버라고도 합니다.

non-static멤버는 객체 생성시에 멤버가 생성되며 객체가 사라지면 멤버도 사라진다는 특성을 가지고 있습니다.

또한 객체 내에 각각 공간을 유지하며 공유되지 않는다는 특성을 가지고 있습니다.


static 멤버는 선언을 할 때

class Sample {

   static int m;

   static void g() {...}

}

이런식으로 선언을 하며 클래스당 하나만 생성되며 멤버는 객체 내부가 아닌 별도의 공간에 생성되므로 클래스 멤버라고도 합니다.

또한 static 멤버는 클래스 로딩 시에 멤버가 이미 생성되어 객체가 생기기 전에 이미 생성되어 있으며 객체가 생기기 전에 이미 사용이 가능하다는 특성을 지니고 있습니다. 또한 객체가 사라져도 멤버는 사라지지 않으며 멤버는 프로그램이 종료될 때 사라지고 동일한 클래스의 모든 객체들에 의해 공유됩니다.

'객체지향 프로그래밍' 카테고리의 다른 글

9.가상함수와 추상클래스  (0) 2016.11.22
7. 상속  (0) 2016.11.15
5. 함수와 참조 , 복사생성자  (0) 2016.11.04
4. 객체포인터와 객체배열, 객체의 동적생성  (0) 2016.10.11
3. 클래스와 객체  (0) 2016.09.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함