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으로 선언되어 있는 데이터필드를 직접 접근하려고 하기 때문에 동작하지 않는다.
'대학강의정리 > 24.1 고급 c++' 카테고리의 다른 글
4주차 10장 객체 지향 개념 3,4,5 (0) | 2024.04.05 |
---|---|
3주차 10장 객체 지향 개념 1,2 (0) | 2024.04.05 |
2주차 9장 객체와 클래스 3,4,5 (0) | 2024.03.18 |
1주차 9장 객체와 클래스 1,2 예상문제 (0) | 2024.03.12 |
1주차 9장 객체와 클래스 1,2 (0) | 2024.03.08 |