10.2 string class
- 문자열 처리는 배열에 '\0'을 사용하는 C-문자열 또는 string클래스로 가능함
- string class를 쓰는 것이 프로그래밍하기 편함
- 문자열 추가 함수 : append
- 문자열 대입 함수 : assign
- at, clear, erase, empty // 검색, 제거, 삭제, 비었는지 확인
- length, size, capacity, c_str // 길이, 크기, 용량, c-문자열로 반환
- 문자열 비교 : compare
- 부문 문자열 : substr
- 문자열 검색 : find
- 문자열 삽입 및 교체 : insert, replace
- 문자열 연산자 사용가능 ex) =, +등
ex1)
string s1 = "Welcome"; //argument없이 생성후 복사(비효율적)
string s1("Welcome"); //argument있이 생성(효율적)
s1.append(" to C"); // Welcome to C
s1.assign("Dallas"); // Dallas
s1.at(1); // a
s1.erase(2, 4); // Da
s1.clear(); // 비어있음
s1.empty(); // True
ex2)
string s1("Welcome");
s1.length(); // 7
s1.size(); // 7
s1.capcity(); // 15, 실제 저장공간 크기
s1.c_str(); // c문자열로 반환
string s2("Welcomg");
s1.compare(s2); // -1 (False)
s1.compare("Welcome"); // 0 (True)
s1.substr(3,3); // com
s1.find("co"); // 3
s1.insert(6, "e to C"); // Welcome to C
s1.insert(11, 3, "C"); // Welcome to CCC
s1.replace(11, 2, "BB"); //Welcome to BBC
ex3)
string s1("Welcomg");
s1 = "Welcome"; // 문자열 복사
s1 += " to C"; // 문자열 연결
cout << s1; // 문자열 스트림에 삽입
10.3 함수에 객체 전달
- 기본적으로 함수에 변수를 전달하는 것은 pass by value임. 객체도 동일
- 객체는 크기가 크기 때문에, 참조에 의하 전달이 효율적임
ex)
void printCircle(Circle &c){ //참조에 의한 전달
...
}
int main(){
Circle c1;
printCircle(c1);
...
}
10.4 객체의 배열
- 객체를 element로 갖는 배열을 선언가능
ex)
Circle circleArray1[3];
Circle circleArray2[3] = {Circle(1), Circle(2), Circle(3)};
10.5 인스턴스(instance) 멤버와 정적(static) 멤버
- class내에서 object들 사이에 공유되는 변수를, static variable(또는 class variable)
- class내에서 object들 사이에 공유되지 않고 instance에 제한적인 변수를, instance variable
- class내에서 object를 생성하지 않고 사용할 수 있는, instance에 독립적인 함수를 정적함수라고 함
- 정적 변수와 정적 함수는 object를 생성하지 않아도 접근 가능함
- 정적함수는 class이름으로 접근하는 것이 좋음
ex)
//Circle.h
class Circle{
...
private:
double radius;
static int numberOfObject; // static variable
public:
static int getNumberOfObject(); // static function
...
};
// Circle.cpp
int Circle::getNumberOfObject(){
return numberOfObject;
}
// main
int main(){
...
cout << Circle::getNumberOfObject() << endl; //정적 함수는 class이름으로 접근하는것이 좋음
}
10.6 상수 멤버 함수(constant member function)
- const키워드를 이용하여, 함수에 argument를 전달할 때 특정 객체가 변경되지 않도록 할 수 있듯,
- 함수자체에 const를 적용하여, 함수에서 객체내 데이터 필드가 변경되지 않도록 할 수 있음
- static function이 아닌, instance function에만 적용 가능
ex)
class Circle{
...
public:
double getArea() const; // instance function에 대한 constant function 선언
...
};
double Cicle::getArea() const{
return radius * radius * 3.14159; // constant function 구현
}
10.8 객체 합성(composition)
- 객체의 합성(composition)이란, 집합(aggregation)관계 중 has-a의 특수한 경우임
- has-a란 하나만을 포함(소유)하는 관계임(A has a B)
- student, name, address 클래스가 존재한다고 가정하자
- student has a name을 만족하고 name은 하나의 student에 고유하므로, 합성(composition)관계임
- student has a address를 만족하고 address는 하나의 student에 고유하지 않고 공유되므로, 합성관계가 아님
- 소유하는 객체를 aggregating object, 소유당하는 객체를 aggregated object
- class가 자신의 class를 소유하는 관계도 가능
ex)
class Student{
private:
Name name; // student class는 name class를 소유
Address address; // student class는 address class를 소유
...
};
class Person{
private:
Person supervisor; // Person class는 자신의 class를 소유
...
};
10.10 클래스 설계 지침
- Cohesion : 클래스는 단일 요소를 설명해야하고, 동작은 분명한 목적이 있어야함
- Consistency : 표준 프로그래밍형식과 명명규칙을 잘 따라야 함
- Encapsulation : private를 사용함으로서, 직접적인 접근으로부터 데이터를 숨겨야함
- Clarity : 설명하기 쉽고 이해하기 쉬운 명확한 규칙을 가져야함, 다른 필드로 부터 유도되는 필드 선언x
- Completeness : 많은 사용자들이 사용할 수 있도록, 다양한 응용을 할 수 있도록 설계
'프로그래밍 > C++ language' 카테고리의 다른 글
9. 객체(object)와 클래스(class) (0) | 2021.09.15 |
---|---|
7, 8. 1차원 Array, C-문자열, 다차원 Array (0) | 2021.09.15 |
6. 함수(function) (0) | 2021.09.15 |
4. 수학함수, 문자, 문자열 (0) | 2021.09.15 |
3. 선택문(if, else ~ switch) (0) | 2021.09.15 |