본문 바로가기
대학강의정리/24.1 고급 c++

2주차 9장 객체와 클래스 3,4,5 연습문제

by 피스타0204 2024. 4. 5.

Q1. 다음 코드의 빈칸을 채워라.

#include <iostream>
using namespace std;

class Circle  
{
public:
  	double radius;  //반지름
	Circle();
	Circle(double newRadius);
	double getArea();

}; // 세미콜론 있어야 함
int main()
{
    Circle c1;
    Circle c2(25);
    Circle c3(125);

      return 0;
 }
_____________ {
    		radius = 1;
 	 }

_______________{
   		 radius = newRadius;
  	}

___________________{
    	   return radius * radius * 3.14;
  	}
더보기

Circle::Circle()

Circle::Circle(double newRadius)

double Circle::getArea()

생성자 함수는 Circle::Circle(){} 이런 식으로 바로 쓰이지만 다른 일반 멤버 함수는 double Circle::getArea()로 자료형 다음에 쓰입니다.

#include <iostream>
using namespace std;

class Circle  
{
public:
  	double radius;  //반지름
	Circle();
	Circle(double newRadius);
	double getArea();

}; // 세미콜론 있어야 함
int main()
{
    Circle c1;
    Circle c2(25);
    Circle c3(125);

      return 0;
 }
Circle::Circle() {
    		radius = 1;
 	 }

Circle::Circle(double newRadius){
   		 radius = newRadius;
  	}

double Circle::getArea(){
    	   return radius * radius * 3.14;
  	}

Q2. main함수 파일이 1개 있을 때 클래스 3개를 파일 분리하여 만들고자 한다면 총 몇개의 파일을 추가로 생성해야 하는가?

더보기

6, 클래스 하나당 2개씩 3번

Q3. 클래스 이름이 Hello일때, 헤더 파일의 이름과 그 구현 파일의 이름을 각각 말하시오.

더보기

Hello.h

Hello.cpp

Q4. Hello.h 파일을 main파일과 연결하려고 할때 써야하는 명령어(statement)는?

더보기

#include "Hello.h"

Q5. Hello.cpp 파일을 Hello.h파일과 연결하려고 할때 써야하는 명령어(statement)와 이것이 적혀야 하는 파일이름을말하시오.

더보기

#include "Hello.h"

Hello.cpp

Q6. 다음 코드의 인라인 함수를 인라인 키워드를 이용해 작성하시오.

//Circle.h
#ifndef CIRCLE_H
#define CIRCLE_H
class Circle {
   public:
      double radius;  //반지름

      Circle(); 
      Circle(double);
      double getPerimeter()//자동인라인함수
      {
          return 2* radius * 3.14159;
      };
      double getArea();	
};
#endif
더보기
//Circle.h
#ifndef CIRCLE_H
#define CIRCLE_H
class Circle {
   public:
      double radius;  //반지름

      Circle(); 
      Circle(double);
      double getPerimeter();
      double getArea();	
}; 

//인라인함수, 반드시 헤더파일에 있어야 함
inline double Circle::getArea()
{
   return radius * radius * 3.14159;
}
#endif

Q7. radius=1인 객체와 radius=5인 객체 하나를 만들어 출력하려고 한다. 다음 코드에서 빈칸을 채우시오.

//Circle.h
#ifndef CIRCLE_H
#define CIRCLE_H


class Circle {
  public:
     Circle(); 
     Circle(double);
     double getArea(); 
     double getRadius();
     void setRadius(double);
          
  private:
     double radius; 		
}; 

#endif
//Circle.cpp
#include "Circle.h"

Circle::Circle() { 
    	radius = 1;
 }

Circle::Circle(double newRadius){
   	 radius = newRadius;
 }

double Circle::getArea(){
    	return radius * radius;
}

double Circle::getRadius(){
    	return radius;
}

void Circle::setRadius(double newRadius){
  radius = (newRadius >=0)?newRadius : 0;
}
//TestCircle.cpp
#include <iostream>
using namespace std;
#include "Circle.h" //헤더파일 포함

int main()
{
        -------------
       ---------------
	
       	cout << "c1의 반지름 : " << --------- << 
		" 면적: " <<---------- << endl;
       	cout << "c2의 반지름 : " << ------------- << 
		" 면적: " << ---------- << endl; 
      
 	return 0;
 }
더보기
int main()
{
           	Circle c1;
       	Circle c2(5);
	
       	cout << "c1의 반지름 : " << c1.getRadius() << 
		" 면적: " << c1.getArea() << endl;
       	cout << "c2의 반지름 : " << c2.getRadius() << 
		" 면적: " << c2.getArea() << endl; 	      
 	return 0;
 }

Q8. 7번의 코드에서 다음 코드를 추가했을 때, 7번의 내용을 포함한 출력을 말하시오.

	c2.setRadius(50);      
 	cout << "c2의 반지름 : " << c2.getRadius() << 
		" 면적: " << c2.getArea() << endl;
더보기

c1의 반지름 : 1 면적: 1
c2의 반지름 : 5 면적: 25
c2의 반지름 : 50 면적: 2500

Q9. 출력 결과를 예상하시오.

int a; //전역변수
class Foo 
{   
   public:
     Foo() 
     {
    	x = 10;
    	y = 10;
     }
     void print() 
     {
    	int x = 20; //지역변수(다른이름 권장) 
    	cout << "x is " << x << endl;
    	cout << "y is " << y << endl;
	cout << "a is " << a << endl;
     }

   private:
   	int x; // 멤버변수
  	int y; // 멤버변수
};
int main()
{
  	Foo foo;
  	foo.print();
  
  	return 0;
}
더보기

x is 20

y is 10

a is 0

Q10. set함수나 get 함수를 통해 접근, 작동하도록 수정하시오.

//TestCircle.cpp
#include <iostream>
Using namespace std;
#include "Circle.h" //헤더파일 포함

int main()
{
           	Circle c1;
       	Circle c2(25);
	
	//작동하는 코드로 수정할 것
       	cout << "c1의 반지름 : " << c1.radius << 
		" 면적: " << c1.getArea() << endl;
       	cout << "c2의 반지름 : " << c2.radius << 
		" 면적: " << c2.getArea() << endl; 

	c2.radius = 50;      
 	cout << "c2의 반지름 : " << c2.radius << 
		" 면적: " << c2.getArea() << endl; 	
       	return 0;
 }
더보기
//TestCircle.cpp
#include <iostream>
using namespace std;
#include "Circle.h" //헤더파일 포함

int main()
{
           	Circle c1;
       	Circle c2(25);
	
       	cout << "c1의 반지름 : " << c1.getRadius() << 
		" 면적: " << c1.getArea() << endl;
       	cout << "c2의 반지름 : " << c2.getRadius() << 
		" 면적: " << c2.getArea() << endl; 

	c2.setRadius(50);      
 	cout << "c2의 반지름 : " << c2.getRadius() << 
		" 면적: " << c2.getArea() << endl; 	      
 	return 0;
 }

Q11. 다음 코드가 왜 틀렸는지 쓰고 고친 후의 출력을 구하시오.? (Circle.h와 circle.cpp에 정의된 Circle클래스를 사용한다.)

//a

int main()

{

Circle c1();

Circle c2(6);

c1=c2;

cout << c1.getArea() <<  endl; //3.14곱하지 않은 값

return 0;

}
더보기

기본 생성자는 괄호가 없어야 하기 때문에 Circle c1;로 바꿔야 한다. 

36

 

Q12. 다음 코드에서 잘못된 부분은 무엇인가?(7번의 코드를 사용한다.)

Circle c;

cout << c.radius <<endl;
더보기
Circle c;

cout << c.getRadius()<<endl;

로 수정해야 한다. private으로 선언되어 있는 데이터필드를 직접 접근하려고 하기 때문에 동작하지 않는다.