#pragma once
#ifndef TIME_H //TIME_H가 define 되어있지 않으면
#define TIME_H //TIME_H를 define 하여라
class Time {
public: // 행동
Time(); //constructor
void setTime(int, int, int);
void printUniversal();
void printStandard();
private: //속성
int hour;
int minute;
int second;
}; // end class Time
#endif
// TIME_H가 이미 define 되어있으면 #define문은 실행되지 않는다.
ifndef와 endif는 세트이다.
- 클래스 정의
: 컴파일러에게 클래스에 속한 멤버 함수와 데이터 멤버를 알려준다.
* 데이터 멤버(멤버 변수)와 멤버 함수의 명기
* 접근 지정자(access-specifier)
public : 다른 함수나 클래스에서 지정된 멤버함수나 데이터 멤버함수에 접근이 가능하다.
#include <iostream>
using namespace std;
class GradeBook {
public:
void displayMessage() {
cout << "welcome to the Grade Book!" << endl;
}//end function displayMessage
}; // end class GradeBook
// function main begins program execution
int main()
{
GradeBook myGradeBook; // object(객체)
myGradeBook.displayMessage();
//call object's displayMessage function
return 0;
}
클래스 정의할 때 세미 콜론을 마지막에 넣는 것을 까먹지 말 것!
- 멤버 함수 정의
* 함수의 반환형(return type)
: 함수가 종료되었을 때 반환할 값의 자료형 (return type을 void로 하였을 때 값을 리턴하면 에러가 뜬다. )
- 클래스의 사용
* 클래스는 사용자 정의 자료형! C++ 객체 생성 시 사용한다. (클래스 형의 변수가 되는 것임)
* dot operator : 객체의 멤버 함수 및 데이터 멤버의 접근에 사용된다. ex) myGradeBook.displayMessage();
Defining a Member Function with a Parameter
- 매개변수와 인수
* 함수 매개변수(parameter) : 함수가 업무를 실행하는데 필요한 정보
* 함수 인수(argument) : 함수의 매개변수를 위해 함수 호출 시 공급된 값 - 인수 값은 함수 매개변수로 복사된다.
- string 객체
* 헤더파일 <string>에서 정의됨
* 문자열 저장 및 활용을 위한 클래스
- getline 함수
* newline 문자를 만날 때까지 문자열을 읽어들임
ex) getline(cin, nameOfCourse); //nameOfCourse는 string 객체
#include <iostream>
#include <string>
using namespace std;
class GradeBook {
public:
void displayMessage(string courseName) {
cout << "welcome to the Grade Book for" << courseName << "!" << endl;
}//end funsction displayMessage
}; // end class GradeBook
// function main begins program execution
int main()
{
string nameOfCourse; // string of characters to store the course name
GradeBook myGradeBook; // object(객체)
//prompt for and input course name
cout << "Please enter the course name : " << endl;
getline(cin, nameOfCourse);
//pass nameOfCourse as an argument
cout << endl;
//call myGradeBook's displayMessage function
// and pass nameofCourse as an argument
myGradeBook.displayMessage(nameOfCourse);
//call object's displayMessage function
return 0;
}
- 함수 안에서 그 함수의 파라미터와 동일한 이름의 변수를 정의하면 에러가 뜬다.
int sum(int n)
{
int n; //compile error
}
- 모호성의 방지를 위해, argument와 parameter의 이름을 같게 하지 말 것!
- 함수이 이름과 매개변수의 이름은 그 속성을 의미하도록 짓기
Data Members, set Functions and get Functions
- 지역 변수
* 함수 안에서 선언된 변수
* 함수 소멸 시 함께 소멸
- 멤버 변수
* 객체가 살아있는 동안만 존재
* 각 객체의 멤버 변수는 서로 다른 메모리를 공유한다.
#include <iostream>
#include <string>
using namespace std;
class GradeBook {
public:
void setCourseName(string name)
{
courseName = name;
}
string getCourseName()
{
return courseName;
}
void displayMessage() {
cout << "welcome to the grade book for\n" << getCourseName() << "!" << endl;
}
private:
string courseName;
}; // end class GradeBook
// function main begins program execution
int main()
{
string nameOfCourse; // string of characters to store the course name
GradeBook myGradeBook; // object(객체)
cout << "Initial course name is : " << myGradeBook.getCourseName() << endl;
//Accessing private data outside class definition
//prompt for and input course name
cout << "Please enter the course name : " << endl;
getline(cin, nameOfCourse);
myGradeBook.setCourseName(nameOfCourse);
//set the course name
cout << endl;
myGradeBook.displayMessage();
//call object's displayMessage function
return 0;
}
- 멤버 함수에 endl을 한번 씩 두면 가독성이 올라감
- 접근 지정자 private
* 동일한 클래스 내의 데이터 멤버나 멤버 함수만 접근이 가능하게 한다.
* private는 클래스 멤버의 기본 접근 지정자
* 자료 은닉 ( 자료의 캡슐화 )
* 기타 접근 지정자 : public, protected
- data 멤버는 private하게, 멤버함수는 public하게,,
- default 접근자가 private멤버이다.
- set과 get함수
* public 멤버 함수로 선언
* private한 데이터 멤버의 값을 설정, 혹은 읽을 수 있도록 정의된 인터페이스 역할
* 같은 클래스의 다른 멤버 함수에 의해서 사용될 수 있음
- UML diagram : 시스템을 구성하는 클래스들 사이의 관계를 표현
* 함수의 반환형은 함수 이름과 () 뒤에 : 을 붙이고 반환형을 명시
* -기호는 private멤버를, + 기호는 public 멤버를 의미한다.
'Langauge > C++' 카테고리의 다른 글
[열혈 C++] 연산자 오버로딩1 내용 요약 및 예제 풀이 (0) | 2021.05.04 |
---|---|
Constructor and Separating Files (0) | 2021.03.18 |
[열혈 C++ 프로그래밍] Chapter 07(상속의 이해) (0) | 2021.03.01 |
[열혈 C++ 프로그래밍] Chapter06 (friend와 static그리고 const) 정리 및 문제 해결 (0) | 2021.02.18 |
[열혈 C++ 프로그래밍] Chapter05(복사 생성자) 정리 및 문제 해결 (0) | 2021.02.16 |