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 생성
- 클래스 선언부(class declaration)
- class 키워드를 사용하여 클래스 정의
- 멤버 변수와 멤버 함수
- 멤버 변수
- 클래스의 멤버인 변수
- 멤버 함수
- 클래스의 멤버인 함수
- 멤버 함수는 해당 클래스의 모든 멤버를 직접 사용 가능
- 객체마다 만들어지는 것이 아니라 클래스 전체에 대해 한 번만 정의하고 같은 클래스의 객체들이
공유해서 사용
- 객체마다 만들어지는 것이 아니라 클래스 전체에 대해 한 번만 정의하고 같은 클래스의 객체들이
- 멤버함수에서 사용되는 멤버 변수는 멤버 함수를 호출한 객체의 것
- 오버로딩, 디폴트 인자 가능
- 멤버 함수와 전역함수의 차이
- 멤버 함수를 호출하려면 객체 이름 지정 필수
- 멤버 함수와 전역함수의 차이
- 멤버 변수
- 접근 지정자(private/protected/public)
- 디폴트 값은 private
- public은 다른 모든 클래스나 객체에서 접근이 가
- 클래스의 멤버를 정의할 때 접근 지정자를 사용
- 정보 은닉과 캡슐화 구현
- 클래스 구현부(class implementation)
- 클래스에 정의된 모든 멤버 함수 구현
- 클래스 선언부에 함께 구현 가능
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;
}
'프로그래밍 언어 > 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 |