한성대학교 김설현교수님 강의내용을 바탕으로 작성함
문자열 작성
string 클래스를 사용하기 위해서는 <string> 헤더파일을 포함시켜야 한다.
문자열 선언시 한글자는 ( ' ' ), 그 이상은 ( " " )를 사용한다.
string s("Welcom to C++"); //아래 코딩보다 더 빠름
string str = "progamming";
코드 | 설명 | 코드 설명 |
s1.append(4,'G') | 문자열을 추가 | G4번 추가 |
s1.assign("AA") | 문자열 배열 또는 문자열을 대입 | AA대입 |
s1.at(3) | 문자열로부터 인덱스 위치의 문자를 반환 | s1.의 3번째 위치 반환 |
s1.clear(2,3) | 문자열의 모든 문자 제거 | 2~3위치 삭제 |
s1.erase( ) | 문자열의 index 위치에서 시작하여 n개의 문자 제거 | s1의 모든 문자 제거 |
s1.empty( ) | 만일 문자열이 비어 있는 경우, 참(true) 반환 | 비어있는 경우 true반환 |
s1.length( ) | 문자열에서 문자의 개수를 반환 | |
s1.size( ) | 문자열에서 문자의 크기를 반환 | |
s1.capacity( ) | 문자열의 할당된 저장 공간의 크기를 반환 | |
s1.compare(s2) | 두 개의 문자열을 비교 | 왼쪽이 크면 1반환 |
s1.substr(0,1) | 문자열로부터 부분 문자열 구현 | 0위치 부터 1개 |
s1.find('o') | 문자열에서 하나의 문자나 부분 문자열을 검색 | 위치 반환 |
함수에 객체 전달
객체도 함수에 인자로 전달할 수 있다.
값에 의한 전달, 참조에 의한 전달 모두 가능.
값에 의한 전달은 얕은 복사, 참조에 의한 전달이 깊은 복사
값에 의한 전달
void printCircle(Circle c) //값에 의한 전달
{
c.setRadius(10); //c의 반지름을 10으로 변경
cout << "반지름 " << c.getRadius() << " 인 c의 면적은: " << c.getArea() << endl;
}
int main()
{
Circle myCircle(5.0);
printCircle(myCircle);
cout << "반지름 " << myCircle.getRadius() << " 인 c의 면적은: " << myCircle.getArea() << endl;
system("Pause");
return 0;
}
참조에 의한 전달
void printCircle(Circle& c) //참조에 의한 전달
{
c.setRadius(10); //c의 반지름을 10으로 변경
cout << "반지름 " << c.getRadius() << " 인 c의 면적은: "
<< c.getArea() << endl;
}
int main()
{
Circle myCircle(5.0);
printCircle(myCircle);
cout << "반지름 " << myCircle.getRadius() << " 인 c의 면적은: " << myCircle.getArea() << endl;
system("Pause");
return 0;
}
객체의 배열
Circle circleArray[10]; //반지름 1인 Circle 객체 10개 생성
인수를 가지는 생성자를 사용해 배열을 선언하고 초기화 하려면 익명개체 사용
Circle circleArray[3] = {Circle(3), Circle(4), Circle(5)};
인스턴스 멤버와 정적 멤버
클래스 내에서 사용되는 데이터필드를 인스턴스 변수라고 한다.
인스턴스 변수는 객체들 사이에서 공유되지 않는다.
같은 클래스 내의 모든 인스턴스가 공유하는 변수는 정적변수(static variable)이라 한다.
클래스 정의부에서 static을 붙여 선언하며 클래스밖 cpp파일에서 초기화해야 한다.
private정적변수를 다루기 위해 정적함수를 제공하기도 한다.
정적함수와 정적변수는 객체생성 없이 호출될 수 있다.
Circle.h
#ifndef CIRCLE_H
#define CIRCLE_H
class Circle
{
public:
Circle();
Circle(double);
double getArea();
double getRadius();
void setRadius(double);
static int getNumberOfObjects(); //정적 함수
private:
double radius;
static int numberOfObjects;
};
#endif
Circle.cpp
#include "Circle.h"
int Circle::numberOfObjects = 0; //초기화
Circle::Circle()
{
radius = 1;
numberOfObjects++;
}
Circle::Circle(double newRadius)
{
radius = newRadius;
numberOfObjects++;
}
double Circle::getArea()
{
return radius * radius * 3.14159;
}
double Circle::getRadius()
{
return radius;
}
void Circle::setRadius(double newRadius)
{
radius = (newRadius >= 0) ? newRadius : 0;
}
int Circle::getNumberOfObjects()
{
return numberOfObjects;
}
상수 멤버 함수
매개 변수가 함수 내에서 변경되지 않도록 할때 const키워드를 사용한다.
인스턴스함수만 const로 정의할 수 있으며(정적함수는 불가) 헤더의 끝에 const키워드를 붙인다.
const객체는 const함수만 호출할 수 있어 멤버변수로 바꾸지 않는 함수는 전부 const로 만들어야 한다.
Circle.h
#ifndef CIRCLE_H
#define CIRCLE_H
class Circle
{
public:
Circle();
Circle(double);
double getArea() const;
double getRadius() const;
void setRadius(double);
static int getNumberOfObjects();
private:
double radius;
static int numberOfObjects;
};
#endif
Circle.cpp
#include "Circle.h"
int Circle::numberOfObjects = 0;
Circle::Circle()
{
radius = 1;
numberOfObjects++;
}
Circle::Circle(double newRadius)
{
radius = newRadius;
numberOfObjects++;
}
double Circle::getArea() const
{
return radius * radius * 3.14159;
}
double Circle::getRadius() const
{
return radius;
}
void Circle::setRadius(double newRadius)
{
radius = (newRadius >= 0) ? newRadius : 0;
}
int Circle::getNumberOfObjects()
{
return numberOfObjects;
}
728x90
'개발 > C++' 카테고리의 다른 글
13장 파일 입력과 출력 (0) | 2019.05.21 |
---|---|
12장 템플릿, 벡터, 스택 (0) | 2019.05.13 |
11장 포인터와 동적 메모리 관리(후) (0) | 2019.05.09 |
11장 포인터와 동적 메모리 관리(전) (0) | 2019.05.08 |
9장 객체와 클래스 (0) | 2019.01.19 |
8장 다차원 배열 (0) | 2019.01.16 |
7장 1차원 배열 (0) | 2019.01.15 |
6장 함수 (0) | 2019.01.04 |
댓글