프로그래밍 언어/C++

4) 클래스와 객체의 기본

busy맨 2023. 11. 1. 22:19

1. 클래스와 객체의 기본 개념

1) 클래스와 객체

  • 클래스(Class)
    • 객체를 만들어 내기 위해 정의된 설계도
    • 사용자 정의 자료형
      • 일종의 데이터 타입 역할을 수행
    • 멤버 변수와 멤버 함수 선언
  • 객체(Object)
    • 클래스에 의해 만들어지는 실제 사용되는 변수
    • 생성 시 클래스의 형태를 가지고 생성
    • 멤버 변수와 멤버 함수로 구성
    • 메모리에 실제로 생성
      • instance(실체)라고도 부름
    • 하나의 클래스에서 여러 객체 생성 가능

 

2. string 클래스와 vector 클래스

1) string 클래스

  • #include<string>
  • 다양한 문자열 연산을 실행하는 연산자와 멤버 함수 포함
    • 문자열 복사, 문자열 비교, 문자열 길이 등
  • Ex) string 객체 생성 및 입출력
#include <iostream>
#include <string>
using namespace std;

int main() 
{
    string name; // 빈 문자열을 가진 스트링 객체
    string address("서울시 성북구 삼선동 389“); // 문자열 리터럴로 초기화
    string copyAddress(address); // address를 복사한 copyAddress 생성
    
    // C-스트링(char [] 배열)으로부터 스트링 객체 생성
    char text[] = {'L', 'o', 'v', 'e', ' ', 'C', '+', '+', '₩0'};
    string title(text); // “Love C++" 문자열을 가진 title 생성
    
    cin >> name ; // 공백이 입력되면 하나의 문자열로 입력
    cout << str << "\n";
    cout << address << "\n";
    cout << copyAddress << "\n";
    cout << text << "\n";
    cout << title << "\n";
    return 0;
}
  • Ex) 문자열 복사
#include <string>
using namespace std;

// 중간 생략
string src = “C++ Programming";
string dest;

// 문자열의 내용을 복사한다.
dest = src;
cout << "src = " << src << "\n";
cout << "desc = " << dest << "\n";
  • Ex) 문자열의 길이 계산
#include <string>
using namespace std;

// 중간 생략
string s1;
string s2 = "123";
string s3 = "abcdefg";

cout << "s1 = " << s1.size() << "\n";
cout << "s2 = " << s2.size() << "\n";
cout << "s3 = " << s3.size() << "\n";
  • Ex) 문자열의 결합과 비교
#include <string>
using namespace std;

// 중간 생략
string str1 = "abcde";
string str2 = "fghij";

// 두 문자열을 결합한다.
str1 = str1 + str2;

if ( str1 == "abcdefghij“ )
	cout << "str1 and \"abcdefghij\" are identical. \n";
if ( "123456" != str1 )
	cout << "\"123456\" and str1 are NOT identical. \n";

  • Ex) 특정 문자열 검색
#include <string>
using namespace std;

// 중간 생략
string text = "Napster's pay-to-play service is officially out, "
	"and we have a review of the now-legit Napster. "
	"We also size up its companion music player from Samsung.";

// 이 문자열 안에서 'official' 이라는 단어의 위치를 찾는다.
cout << "Offset of 'official' = " << text.find("official") << "\n";

 

2) string 클래스의 주요 멤버 함수들

3) vector 클래스

  • 동적 배열
  • 가변 길이 배열을 구현한 Template Class
    • 벡터의 길이에 대한 고민할 필요 X
    • 어떤 타입이든 저장 가능
  • 원소의 저장, 삭제, 검색 등 다양한 멤버 함수 지원
  • vector에 저장된 원소는 인덱스로 접근 가능
    • 인덱스는 0부터 시작
  • 연속된 메모리 공간에 할당되어 있어 끝에서 삽입/삭제가 일어날 경우 속도가 빠름

 

4) vector 클래스의 주요 멤버와 연산

#include <iostream>
#include <vector>
using namespace std;

int main() 
{
    vector<int> v; // 정수만 삽입 가능한 벡터 생성
    
    v.push_back(1); // 벡터에 정수 1 삽입
    v.push_back(2); // 벡터에 정수 2 삽입
    v.push_back(3); // 벡터에 정수 3 삽입
    
    for(int i=0; i<v.size(); i++) // 벡터의 모든 원소 출력
    	cout << v[i] << " "; // v[i]는 벡터의 i 번째 원소
    cout << endl;
    
    v[0] = 10; // 벡터의 첫 번째 원소를 10으로 변경
    int n = v[2]; // n에 3이 저장
    v.at(2) = 5; // 벡터의 3 번째 원소를 5로 변경
    
    for(int i=0; i<v.size(); i++) // 벡터의 모든 원소 출력
    	cout << v[i] << " "; // v[i]는 벡터의 i 번째 원소
    cout << endl;
}

 

3. C++에서의 클래스 정의 및 사용

1) class 생성

  1. 클래스 선언부(class declaration)
    • class 키워드를 사용하여 클래스 정의
    • 멤버 변수와 멤버 함수
      • 멤버 변수
        • 클래스의 멤버인 변수
      • 멤버 함수
        • 클래스의 멤버인 함수
        • 멤버 함수는 해당 클래스의 모든 멤버를 직접 사용 가능
          • 객체마다 만들어지는 것이 아니라 클래스 전체에 대해 한 번만 정의하고 같은 클래스의 객체들이
            공유해서 사용
        • 멤버함수에서 사용되는 멤버 변수는 멤버 함수를 호출한 객체의 것
        • 오버로딩, 디폴트 인자 가능
          • 멤버 함수와 전역함수의 차이
            • 멤버 함수를 호출하려면 객체 이름 지정 필수

  • 접근 지정자(private/protected/public)
    • 디폴트 값은 private
    • public은 다른 모든 클래스나 객체에서 접근이 가 
    • 클래스의 멤버를 정의할 때 접근 지정자를 사용
    • 정보 은닉과 캡슐화 구현
  1. 클래스 구현부(class implementation)
    • 클래스에 정의된 모든 멤버 함수 구현
    • 클래스 선언부에 함께 구현 가능

 

2) 객체 생성 및 활용

  • 멤버 변수의 메모리 할당 시점
    • 클래스의 객체를 생성하는 시점에 멤버 변수가 메모리에 할당
  • 멤버 변수나 멤버함수에 접근 방법
    1. 일반 객체 
      • (.) 연산자 사용
    2. 동적 객체
      • (->) 연산자 사용
Circle c1; // 일반 객체
c1.radius = 2;

Circle *c2 = new Circle; // 동적 객체, 객체에 대한 포인터
p →radius = 3;

 

  • Ex) Circle 클래스 객체 생성 및 활용
#include <iostream> 
using namespace std; 

class Circle 
{
    public:
    int radius; 
    double getArea(); 
}; 

double Circle::getArea() 
{
	return 3.14*radius*radius;
}

int main() 
{
    Circle donut; 
    donut.radius = 1; // donut 객체의 반지름을 1로 설정
    double area = donut.getArea(); // donut 객체의 면적 알아내기
    cout << "donut 면적은 " << area << endl;
    
    Circle pizza; 
    pizza.radius = 30; // pizza 객체의 반지름을 30으로 설정
    area = pizza.getArea(); // pizza 객체의 면적 알아내기
    cout << "pizza 면적은 " << area << endl;
}

result

'프로그래밍 언어 > C++' 카테고리의 다른 글

6) 접근 지정자, static 멤버  (0) 2023.11.02
5) 생성자와 소멸자  (0) 2023.11.01
3) 개선된 함수 기능  (0) 2023.11.01
2) 포인터와 레퍼런스  (1) 2023.11.01
1) C++ 프로그래밍의 기본  (2) 2023.11.01