본문 바로가기

Programming/C++ 2

[C++ 연습문제] 10장. 객체와 클래스 (1)

반응형

1. 클래스란 무엇인가?

더보기

클래스란 속성과 메서드를 함께 묶어서 기본 데이터형처럼 호출하도록 만들어진 데이터형이다.

더보기

클래스는 사용자 정의 데이터형의 정의이다.

클래스 선언은 데이터를 저장하는 방법을 서술한다.

또한 클래스 선언은 데이터에 접근하여 그들을 조작하는 데 사용할 수 있는 메서드(클래스 멤버 함수)를 서술한다.

2. 클래스는 추상화, 캡슐화, 데이터 은닉을 어떻게 수행하는가?

더보기

클래스는 private 부분에 멤버 데이터를 정의하고, public 부분에 멤버 데이터를 접근 할 수 있는 멤버함수를 정의해서 private에 있는 멤버데이터의 직접접근을 막아서 수행한다.

더보기

클래스는 클래스 메서드의 public 인터페이스를 통해 클래스 객체를 대상을 수행할 수 있는 연산을 서술 :추상화

클래스는 데이터 멤버들에 대해 private를 사용, 멤버 함수를 통해서만 그 데이터에 접근가능 : 데이터 은닉

데이터 표현과 메서드 코드와 같은 세부 구현은 사용자에게 은닉되어있다. : 캡슐화

3. 객체와 클래스 사이에는 어떤 관계가 있는가?

더보기

클래스는 객체를 표현하는 방법과 사용하는 방법에 대해 정의해둔 데이터형이다.

더보기

클래스는 하나의 데이터형을 정의한다.

데이터형을 어떻게 사용할지 변수 또는 클래스 정의에 따라 사용되는 new에 의해 대입되는 것과 같은 또 다른 데이터 객체이다.

클래스와 객체 사이의 관계는 표준 데이터형과 그 데이터형의 변수 사이의 관계와 같다.

4. 클래스 함수 멤버들은 그들이 함수라는 것 외에, 클래스 데이터 멤버들과 어떻게 다른가?

더보기

클래스 멤버 함수는 클래스 데이터 멤버에 유일하게 접근가능한 통로이고, pulic이므로 어디서나 호출 가능하다.

더보기

주어진 하나의 클래스를 사용 -> 여러 개의 객체를 생성하면, 각 객체는 자신만의 고유 데이터 집합을 저장할 공간을 따로따로 대입받는다. 

그러나 모든 객체들은 하나의 멤버 함수 집합을 공유

 

[cin.get()이 한 행 전체를 읽어들이므로 cin.get(char *, int)를 사용해 이름들을 읽는다. 

5. 은행 계좌를 나타내는 클래스만 선언

  • 객체를 생성하고 초기화
  • 예금주의 이름, 계좌 정보, 잔액을 출력
  • 매개변수로 전달된 금액을 입금
  • 매개변수로 전달된 금액을 출금
더보기

 

class Bank {

private:

string account;

public:

void show(account * ac,double money);

void deposit(double money);

void withdraw(double money);

}

더보기

#include<cstring>

class BankAccount

{

private:

 char name [40]; //std::string

name;

 char acctnum[25]; //std::string acctnum;

 double balance;

public:

 BankAccount(const char* client, const char* num, double bal=0.0);

//BankAccount(const std::string &client, const std::string &num, double bal=0.0);

void show(void) const;

void deposit(double cash);

void withdarw(double cash);

};

6. 클래스 생성자와 파괴자는 언제 호출되는가?

더보기

생성자는 객체를 생성할 때 파괴자는 객체의 수명이 끝날 때

더보기

클래스 생성자는 그 클래스의 객체를 생성할 때 또는 명시적으로 그 생성자를 호출할 때 호출.

클래스 파괴자는 객체의 수명이 다했을 때 호출.

7. 연습문제 5의 은행 계좌 클래스를 위한 생성자 코드 작성

더보기

 

account(){

};

 

더보기

1. strncpy()함수 이용 [cstring 혹은 string.h 포함]

BankAccount::BankAccount(cont shar* client, const char* num, double bal)

{

strncpy(name, client, 39);

name[39]='\0';

strncpy(acctnum, num, 24);

acctnm[24]='\0';

balance =bal;

 

2. string 이용

BankAccount :: BankAccount(const std::string& client, const std::string& num, double bal)

{

name= client;

acctnum=num;

balacne=bal;

}

[디폴트 매개변수는 함수 정의가 아니라 함수 원형에 넣는다.]

8. 디폴트 생성자가 무엇인지 쓰고 사용하는 이점에 대해 말하라

더보기

생성자가 생성되지 않았을 경우 사용되고, 자동생성되므로 생성할 필요가 없다.

더보기

디폴트 생성자는 매개변수가 하나도 없는 생성자 또는 모든 매개변수에 디폴트값을 사용하는 생성자

디폴트 생성자를 사용하면, 초기화를 수행하는 생성자가 이미 정의되어있더라도, 초기화하지 않고 객체들을 선언 가능.

또한 객체들의 배열을 선언할 수 있게 해준다.

9. Stock 클래스를 수정해 개별적인 데이터 멤버들의 값을 리턴하는 멤버함수 추가. 회사명을 리턴하는 멤버 함수가 그 배열을 변경 못하게 설정. string 참조 리턴 불가, const 참조 리턴 가능

더보기

 

public:

void showall(const account & ac);

};

 

void showall(const account & ac)

{

 cout<<account.xxx;

};

더보기

//stock3.h
#ifndef STOCK3_H_
#define STOCK3_H_

class Stock
{
private:
std::string company;
int shares;
double share_val;
double total_val;
void set_tot() {
total_val = shares * share_val;
}
public:
Stock(); //디폴트 생성자
Stock(const std::string& co, int n, double pr);
~Stock(){} //아무 일도 하지 않는 파괴자
void buy(int num, double price);
void sell(int num, double price);
void update(double price);
void show() const;
const Stock& topval(const Stock& s)const;
int numshares() const { return shares; }
double shareval() const { return share_val; }
double totalval() const { return total_val; }
string co_name() const { return company; }
};

10. this와 *this에 대해 설명

더보기

this는 메소드를 호출한 객체 지시하는 것으로 *this면 그 객체 자체를 말한다.

더보기

this 포인터는 클래스 메서드에서 사용할 수 있는 포인터이다. 그것은 그 메서드를 호출하는 데 사용된 객체를 지시한다. 그러므로 this는 그 객체의 주소이며, *this가 그 객체 자체를 나타낸다.

 

반응형

'Programming > C++ 2' 카테고리의 다른 글

[C++] 17. 파일 입출력  (0) 2021.06.01
[C++ 요약] 10장. 객체와 클래스  (0) 2021.04.12
[C++] 10장-7. 추상화 데이터형  (0) 2021.04.12
[C++] 10장-5. 객체 배열  (0) 2021.04.11
[C++] 10장-4. this 포인터  (0) 2021.04.11