모두들 수고하셨습니다. 중간고사 답안지 입니다.
Just another Kyoung Shin Park's Lectures Sites site
namespace PersonTest
{
class Person
{
static int count = 0; // static (class) variables
string name; // instance variables
int age; // instance variables
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
public Person() : this(“”, 0)
{
}
public Person(string name, int age)
{
count++;
this.name = name;
this.age = age;
}
public virtual void Print() // instance methods
{
Console.WriteLine(“Person Name: {0} Age: {1}”, name, age);
}
public override string ToString() // instance methods
{
return “Person Name: ” + name + ” Age: ” + age;
}
public static int GetCount() { return count; } // static (class) methods
public static void PrintCount() { Console.WriteLine(“Person Count: ” + count); } // static (class) methods
}
}
namespace PersonTest
{
class Student : Person
{
static int scount = 0; // static (class) variables
int id;
public int ID
{
get
{
return id;
}
set
{
id = value;
}
}
public Student() : this(“”, 0, 5208) // Student() => public Student : base()와 같은 의미, 생성자는 상속안됨
{
}
public Student(string name, int age, int id)
: base(name, age)
{
this.id = id;
scount++;
}
public void BasePrint()
{
base.Print();
}
public override void Print() // instance methods
{
Console.WriteLine(“Student Name: {0} Age: {1} Id: {2}”, Name, Age, ID);
}
public override string ToString() // instance methods
{
return “Student Name: ” + Name + ” Age: ” + Age + ” Id: ” + ID;
}
// Person 클래스의 GetCount & PrintCount와 동일한 이름이므로, Student 감춤. new 키워드를 사용하여 새로정의함.
public static new int GetCount() { return scount; } // static (class) methods
public static new void PrintCount() { Console.WriteLine(“Student Count: ” + scount); } // static (class) methods
}
}
namespace PersonTest
{
class Program
{
static void Main(string[] args)
{
Person p1 = new Student(“Kyoung”, 22, 1207); // up casting
p1.Age = 30;
p1.Print(); // dynamic binding Student Name: Kyoung Age: 30 ID: 1207
//p1.BasePrint(); // cannot call Student method due to Person
//p1.PrintCount(); // cannot call static method with instance name
Person.PrintCount(); // calls Person.PrintCount() 1
Student.PrintCount(); // calls Student.PrintCount() 1
Student s1 = (Student)p1; // down casting
s1.Name = “HCI”;
s1.Age = 2;
s1.ID = 2016;
s1.Print(); // Student Name: HCI Age: 2 ID: 2016
s1.BasePrint(); // Person Name: HCI Age: 2
Person.PrintCount(); // calls Person.PrintCount() 1
Student.PrintCount(); // calls Student.PrintCount() 1
Student s2 = new Student(“Shin”, 20, 1207);
s2.Print(); // Student Name: Shin Age: 20 ID: 1207
s2.BasePrint(); // Person Name: Shin Age: 20
Person.PrintCount(); // calls Person.PrintCount() 2
Student.PrintCount(); // calls Student.PrintCount() 2
Person p2 = new Person(“Park”, 10);
p2.Print(); // Person Name: Park Age: 10
Person.PrintCount(); // calls Person.PrintCount() 3
Student.PrintCount(); // calls Student.PrintCount() 2
Person p3 = new Person();
p3.Print(); // Person Name: Age: 0
Person.PrintCount(); // calls Person.PrintCount() 4
Student.PrintCount(); // calls Student.PrintCount() 2
Console.WriteLine(“Number of Person: {0}”, Person.GetCount());
Console.WriteLine(“Number of Student: {0}”, Student.GetCount());
}
}
}
중간고사
시험범위: 처음부터 – 배운데까지
일시: 2016년 10월 24일 (월) 1:30 – 3:30
장소: 2과학관 313-1호
http://dis.dankook.ac.kr/lectures/hci10/entry/Method-Overloading-vs-Method-Overriding
Method Overloading: 동일한 함수명에 매개변수가 다른 함수를 둘 이상 정의하는 것으로, 동일한 함수 기능을 수행하지만 다른 매개변수의 경우를 처리할 때 사용
Method Overriding: 상속받은 파생 클래스에서 동일한 함수명에 동일한 매개변수로 정의하여 함수를 재정의하는 것으로 상속되어진 함수의 기능을 변경해서 재사용하고 싶을 때 사용
}
// constructor & destructor
public Point3D() : this(0, 0, 0) { }
public Point3D(int x, int y, int z) : base(x, y) { this.z = z; }
~Point3D() { }
public void SetPosition(int x, int y, int z) { base.SetPosition(x, y); this.z = z; }
public void Move(int x, int y, int z) { base.Move(x, y); this.z += z; }
// override method
public override string ToString() { return (String.Format(“({0}, {1}, {2})”, x, y, z)); }
public override void Print() { Console.WriteLine(“X={0} Y={1} Z={2}”, x, y, z); }
public override void Sum(Point other)
{
// overload method
public void Sum(Point3D other) { x += other.X; y += other.Y; z += other.Z; }
// operator++ overload
public static Point3D operator++(Point3D p) { ++p.x; ++p.y; ++p.z; return p; }
// operator== overload
public static bool operator ==(Point3D p1, Point3D p2) { return p1.Equals(p2); }
// operator!= overload
public static bool operator !=(Point3D p1, Point3D p2) { return !p1.Equals(p2); }
public override int GetHashCode() { return x ^ y ^ z; }
public override bool Equals(object obj)
{
if (!(obj is Point3D))
return false;
else
}
// IEquatable
public bool Equals(Point3D other)
{
else if ((this.x == other.x) && (this.y == other.y) && (this.z < other.z))
{
else
{
}
단국대학교 멀티미디어공학과 HCI프로그래밍2 (2016년 가을학기) 실습
과목코드 : 300890
강사 : 박경신
——————————————————————
날짜: 2016년 10월 10일
– 실습번호 : HW1 (Due by 10/24)
– 실습제목 : class, abstract class, inheritance, property, ArrayList
– 실습요약 : 입체 도형의 겉넓이(surface area)와 부피(volume) 구하기 & 평면 도형의 넓이(area) 구하기
– 준비자료 : HW1 http://www.mathsisfun.com/area-calculation-tool.html
http://math.about.com/od/formulas/ss/surfaceareavol.htm
10/20까지 online.dankook.ac.kr 이러닝으로 실행파일(bin\*.exe)과 소스코드(*.cs)와 보고서(*.doc/*.hwp)를 전부 “학번_이름_HW1.zip”으로 묶어서 제출한다. 또한, 비주얼 스튜디오에서 만든 프로젝트 전체 파일(*.sln, *.csproj)을 폴더에 같이 넣어준다. 보고서는 출력해서 수업시간에 제출한다.
– 실습문제
0. GeometryType과 FigureType을 아래와 같이 정의한다.
enum GeometryType { SPHERE=1, CONE=2, CYLINDER=3, RECTANGULAR_PRISM=4, SQUARE_PYRAMID=5, ISOSCELES_TRIANGULAR_PRISM=6 }
enum FigureType { TRIANGLE=1, SQUARE=2, RECTANGLE=3, PARALLELOGRAM=4, RHOMBUS=5, TRAPEZOID=6 }
1. Geometry와 Figure 추상클래스를 정의한다.
public abstract class Geometry {
public abstract GeometryType Type { get; } // 도형타입 (GeometryType)
public abstract double SurfaceArea { get; } // 겉넓이
public abstract double Volume { get; } // 부피
public abstract void GetAdditionalUserInput(); // 추가적인 사용자 입력
public void PrintInfo() {
System.Console.WriteLine(ToString() + “ S.A.=” + SurfaceArea + “ Vol=” + Volume);
}
public abstract class Figure {
public abstract FigureType Type { get; } // 도형타입 (FigureType)
public abstract double Area { get; } // 넓이
public abstract void GetAdditionalUserInput(); // 추가적인 사용자 입력
public void PrintInfo() {
System.Console.WriteLine(ToString() + “Area=” + Area);
}
2. Geometry 추상클래스를 상속받은 Sphere, Cone, Cylinder, … 는 겉넓이(Surface Area), 부피(Volume)를 계산하여 출력한다. 그리고 Figure 추상클래스를 상속받은 Triangle, Square, Rectangle, … 등 클래스는 넓이(Area)를 계산하여 출력한다.
3. GeometryFactory 클래스와 FigureFactory 클래스는 사용자가 입력한 도형타입에 따라 원하는 실제 클래스 (즉, Sphere, Cone, … 그리고 Triangle, Square,.. 등등) 객체를 생성하여 계산한다. 이 클래스는 다음의 메소드 (Method)만을 갖는다.
+public static Geometry GetInstance(GeometryType type)
+public static Figure GetInstance(FigureType type)
4. GeometryCalculator 클래스와 FigureCalculator 클래스는 계산 메소드를 갖는다
+ public static void CalculateAll() // ArrayList에 Geometry/Figure 객체를 생성하여 넣고, 각각의 SurfaceArea&Volume/Area를 계산한다.
+ public static void CalculateByUserInput() // 사용자 입력으로 원하는 Geometry/Figure 객체를 생성하여 SurfaceArea&Volume/Area를 계산하고, ArrayList에 저장해 두었다가 프로그램을 종료할 시 전체 리스트를 출력한다.
5. Utility 클래스에서는 각종 유틸리티 메소드를 갖는다.
+public static GeometryType GetUserGeometry()
+public static FigureType GetUserFigure()
+public static double GetUserInputDouble()
+public static int GetUserInputBetween(int min, int max)
+public static bool GetUserExitKey()
6. GeoFigCalculator 클래스에서는 사용자의 입력에 따라 GeometryCalculator와 FigureCalculator를 이용하여 계산한 모든 결과를 출력한다.
7. 사용자의 잘못된 입력에 따른 처리를 반드시 포함해야 하며, 그 외에 본인이 더 테스트해보고 싶은 method나 routine을 추가하라. 실행 화면과 코드를 첨부하시오.
HW1 숙제를 e-learning 강의실에 실행파일(bin\*.exe)과 소스코드(*.cs)와 보고서(*.doc/*.hwp)를 전부 “학번_이름_HW1.zip”으로 묶어서 제출하도록 합니다. 또한, 비주얼 스튜디오에서 만든 프로젝트 전체 파일(*.sln, *.csproj)을 폴더에 같이 넣어주시기 바랍니다. 보고서는 출력해서 수업시간에 제출합니다.