'Programming'에 해당되는 글 29건

  1. 2009.05.31 [C#] 상속과 sealed 1
  2. 2009.05.31 [C#] 인터페이스, 추상클래스, 클래스 1
  3. 2009.05.31 [C#] static과 new 그리고 property
  4. 2009.05.31 [C#] C# 시작하기
  5. 2009.05.31 [MFC] Fireworks Display 2
  6. 2009.05.31 [MFC] Draw Shapes
  7. 2009.05.30 SRM 191 DIV 2 (250)
  8. 2009.05.27 SRM 148 DIV 2 (250)
  9. 2009.05.27 SRM 146 DIV 2 (250)
  10. 2009.05.27 SRM 147 DIV 2 (250)

[C#] 상속과 sealed

Programming/.NET Programming 2009. 5. 31. 05:55

상속과 키워드 sealed 용어 정리

상속 : 어떤 클래스를 기본으로 새로운 클래스가 파생되는 것.
부모클래스(기본 클래스)로부터 상속을 받아 자식클래스(파생 클래스)가 생성된다.
상속 과정에서 클래스의 내용이 추가되기도 하고 함수의 내용이 바뀌기도 한다.

sealed : 더이상의 상속을 막는 keyword, 추상클래스/인터페이스 앞에는 못 씀
추상클래스를 상속받은 클래스에서 추상함수를 정의를 해줘야하고, 인터페이스 역시 다른 클래스에 상속을 하여 선언된 함수들을 정의 해줘야 하기 때문이다.

상속과 키워드 sealed 예제

using System;


namespace Study

{

    interface 인터페이스

    {

        void Test();

    }


   
interface
인터페이스2

    {

       void Test();

    }

 

    abstract class 추상클래스

    {

        public abstract void Test();

    }


   
class
일반클래스 : 인터페이스, 인터페이스2, 추상클래스
    {

        void 인터페이스.Test() // '인터페이스.' : 어디에서 상속받은 건지 명시

        {

            throw new NotImplementedException();

        }

 

        void 인터페이스2.Test() // '인터페이스2.' : 어디에서 상속받은 건지 명시
        {

            throw new NotImplementedException();

        }

 

        public override void 추상클래스.Test()
                                    // '추상클래스.' : 어디에서 상속받은 건지 명시
        {

            throw new NotImplementedException();

        }

    }

 

    sealed class 일반클래스2 : 일반클래스 

    {

    }

 

    class 일반클래스3 : 일반클래스2 // Error. 일반클래스2 앞에 sealed 때문에 안됨

    {

        public 일반클래스3()

        {

        }

    }

}



'Programming > .NET Programming' 카테고리의 다른 글

[C#] this와 상속  (0) 2009.05.31
[C#] 오버로딩과 오버라이딩  (0) 2009.05.31
[C#] 인터페이스, 추상클래스, 클래스  (1) 2009.05.31
[C#] static과 new 그리고 property  (0) 2009.05.31
[C#] C# 시작하기  (0) 2009.05.31
:

[C#] 인터페이스, 추상클래스, 클래스

Programming/.NET Programming 2009. 5. 31. 05:11

인터페이스, 추상클래스, 클래스 용어 정리

인터페이스 : 가장 기본적으로 가질 수 있는 공통 기능을 포함하고 있는 것
                이것을 일반 클래스에 여러개의 상속해서 사용
---> 팀프로젝트에서 주로 사용, 필요한 함수들을 미리 선언하고, 여러 부분으로 나눠서 각각 따로 구현하니까 자신이 구현하는 부분이 아닌 나머지 부분은 구현되있다고 (상속을 받는다거나) 가정하고 코딩

추상클래스 : 비슷하거나 같은 기능을 포함, 이름은 같고, 하는 일은 비슷하거나 같지만 구현 내용(방식)이 다를 때 사용

클래스
: 가장 일반적인 클래스를 말하며, 인터페이스나 추상클래스로부터 상속받은 뒤 추가적인 기능을 구현하여 각각의 새로운 객체로 만들 떄 사용
---> class안에 class를 선언할 수 있지만, methode안에는 class를 선언할 수 없다.


인터페이스, 추상클래스, 클래스의 특징

인터페이스 : method의 원형만 선언할 수 있음
1. 변수 선언 불가능
2. 함수 정의 불가능
3. 함수 원형 선언 가능

추상클래스 : 추상 method를 가질 수 있는 클래스, 객체 가질 수 없음 (class 생성 불가)
1. 변수 선언 가능
2. 함수 정의 가능
3. 함수 원형만 선언 가능

클래스 : 가장 일반적인 Class
1. 변수 선언 가능
2. 함수 정의 가능
3. 함수 원형만 선언은 불가능, 정의도 해줘야 함

상속 관계
1. 인터페이스 → 인터페이스 (가능)
2. 인터페이스 → 추상클래스 (가능)
3. 인터페이스 → 일반클래스 (가능)
4. 추상클래스 → 일반클래스 (가능) : 추상함수 정의를 해야함
5. 추상클래스 → 추상클래스 (가능)
6. 일반클래스 → 추상클래스 (가능)
7. 일반클래스 → 일반클래스 (가능)
8. 추상클래스 → 인터페이스 (불가능)
9. 일반클래스 → 인터페이스 (불가능)
 


인터페이스, 추상클래스, 클래스 예제

using System;


namespace Study

{

    /// <summary>

    /// 인터페이스

    /// </summary>

    interface 인터페이스

    {

        // int a; // 변수 선언 X

        // void test(){}; // 함수 정의 X

        void Test1(); // 함수 선언만 가능

    }

 

    /// <summary>

    /// 추상클래스

    /// </summary>

    abstract class 추상클래스

    {

        int a; // 변수 선언 O

        void Test1() // 함수 정의, 선언 O

        {

            a++;

        }

        public abstract void Test2(); // 추상함수(선언만 하는 함수)

    }

 

    /// <summary>

    /// 일반클래스

    /// </summary>

    class 추상클래스일반클래스 // 추상클래스로부터 상속받음

    {

        public static void Main(string[] args)

        {

        }

        public override void Test2() // 추상함수를 override해 줌

        {

            throw new NotImplementedException();

        }

    }

}



'Programming > .NET Programming' 카테고리의 다른 글

[C#] this와 상속  (0) 2009.05.31
[C#] 오버로딩과 오버라이딩  (0) 2009.05.31
[C#] 상속과 sealed  (1) 2009.05.31
[C#] static과 new 그리고 property  (0) 2009.05.31
[C#] C# 시작하기  (0) 2009.05.31
:

[C#] static과 new 그리고 property

Programming/.NET Programming 2009. 5. 31. 04:34

키워드 static

using System;

namespace Program

{

    class A

    {

        int a;

        static int b;
 

        // static 변수
       
public void main()

        {

             this.a; // Error. 객체생성이 아직 안된 상태라서 사용할 수 없음    

        }


        public static void main2()

        {

             this.b; // 에러. static 함수내에서는 this를 사용할 수 없음

             b = 10; // 함수도 변수도 모두 static이니까 객체 생성 전에도 사용할 수 있음
        }

    }

 

    class B

    {

        // static 함수
       
public static void Write()

        {

            Console.WriteLine("Test");

        }

        // 굳이 객체 생성하지 않아도 클래스 이름만으로 접근 가능 ---> B.Write();

        // 자주 사용하는 함수는 편하게 사용하라고 static으로 선언

        // 대표적인 예가 Math함수

     }

}

 

// 정리
//  static은 프로그램이 구동되기 직전 메모리 할당을 받고,
//  프로그램 종료시 까지 사라지지 않도록 변수 및 함수 앞에 붙이며
//  프로그램 구동 되기 전 메모리에 할당이 되기 때문에
//  소속된 객체 생성 여부에 상관없이 클래스의 이름만으로도 사용가능하다.


키워드 new

A a; // 클래스를 가리키기 위한 포인터 변수만 선언, 크기는 4byte

A a = new a(); // 클래스 크기의 공간이 잡힘, 포인터가 그 클래스를 가리킴
* C# 문법에는 pointer라는 개념이 없지만, 다른 문법을 구현 과정에 사용되고 있다.


private 함수를 접근 가능하게 해주는 Property

namespace Study
{

    public class A

    {

        private int a;

        public int results // 함수와 모양이 비슷하지만 파라미터를 가지지 않음

        {

               get { return a; } // 읽

               set { a = value; } // 쓰기

               // 둘 중 하나를 지우면 읽기 전용이나 쓰기 전용 변수로 바꿀 수 있음

         }
    }

}

// property를 사용하는 이유
//  1. 읽기와 쓰기 둘 중 어느 하나만 가능하게 할 수 있다.

//  2. 실제 값을 변경하지 않고도 가져올 때 처리를 해서 가져올 수 있다.


'Programming > .NET Programming' 카테고리의 다른 글

[C#] this와 상속  (0) 2009.05.31
[C#] 오버로딩과 오버라이딩  (0) 2009.05.31
[C#] 상속과 sealed  (1) 2009.05.31
[C#] 인터페이스, 추상클래스, 클래스  (1) 2009.05.31
[C#] C# 시작하기  (0) 2009.05.31
:

[C#] C# 시작하기

Programming/.NET Programming 2009. 5. 31. 04:13

C# Console 응용프로그램 프로젝트 생성시 기본 소스

// 키워드 Using

//  자주 사용하는 namespace가 포함하는 클래스를 사용할 수 있게 함(간략화)

//  자주 사용하는 namespace를 적지 않아도 그 안의 내용을 사용할 수 있음
//  ex. System.Console.WriteLine(); --> Console.WriteLine();
//  namespace는 다른데 함수 이름이 같을 경우는 문제가 됨

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Program // 범위 설정

{

    // 필요한 코드나 타입을 정의함
    // C#은 클래스 단위로 실행됨

    class Program

    {

        static void Main(string[] args) // Main 함수

        {

        }

    }

}


변수 접근 권한 설정 키워드(클래스 및 변수 선언시 사용)

private : 선언된 클래스 내부에서만 사용됨, 변수 기본설정

protected : 선언된 클래스와 상속된 클래스에서 사용됨

internal : 같은 어셈블리(프로젝트) 안에서만 사용됨, 외부공개(extern) 안됨

public : 어떤 곳에서도 사용됨, 함수/클래스 기본설정, 특히 생성자는 public으로!

변수 Type의 종류와 각각의 크기

int a; // integer형, 4byte

float f; // float형, 4byte

double d; // double형, 8byte

char c; // character형, 유니코드 기본지원, 2byte 

string s; // char형 배열

s = "EnSharp"; // string은 큰 따옴표 사용

c = '#'; // char는 작은 따옴표 사용



'Programming > .NET Programming' 카테고리의 다른 글

[C#] this와 상속  (0) 2009.05.31
[C#] 오버로딩과 오버라이딩  (0) 2009.05.31
[C#] 상속과 sealed  (1) 2009.05.31
[C#] 인터페이스, 추상클래스, 클래스  (1) 2009.05.31
[C#] static과 new 그리고 property  (0) 2009.05.31
:

[MFC] Fireworks Display

Programming/GUI Programming 2009. 5. 31. 00:19


 개발환경
Tool : Visual Studio 2008
Language : C++
Library : MFC

 개발기간
2009년 5월 10일 ~ 2009년 5월 15일(6일)
 
Comments
박상일 교수님의 Visual C++ Programming 수업 과제
스페이스 바나 불꽃 버튼을 누르면 노드가 생성되고 포물선을 그리면서 올라간다.
메뉴에서 여러가지 옵션을 줄 수 있다.
Divition(분할), Fragments(분할 입자 수), Color Change(투명도 변화), Tails(꼬리 생성)
교수님이 하신 것보다 조금 많이 부자연스럽지만
그래도 처음에 과제를 접하고 ㅈㅈ칠 뻔한 것을 완성했다는 점에 의의를 둔다.

'Programming > GUI Programming' 카테고리의 다른 글

[MFC] Draw Shapes  (0) 2009.05.31
[Win32] Bacteria War (Demo)  (0) 2009.05.26
:

[MFC] Draw Shapes

Programming/GUI Programming 2009. 5. 31. 00:09


 개발환경
Tool : Visual Studio 2008
Language : C++
Library : MFC

 개발기간
2009년 4월 6일 ~ 2009년 4월 10일(5일)
 
Comments
박상일 교수님의 Visual C++ Programming 수업 과제
마우스 왼쪽 버튼으로 드래깅 : 김태희 사진으로 채워진 사각형이 그려짐
마우스 오른쪽 버튼으로 드래깅 : 색깔이 채워진 원이 그려짐
마우스 가운데 버튼을 클릭 : 다각형의 꼭지점을 찍을 수 있음
가운데 버튼 클릭으로 꼭지점을 그린 후 마우스 왼쪽/오른쪽 버튼 누르면
찍었던 점이 이어지면서 다각형이 그려지는 프로그램

'Programming > GUI Programming' 카테고리의 다른 글

[MFC] Fireworks Display  (2) 2009.05.31
[Win32] Bacteria War (Demo)  (0) 2009.05.26
:

SRM 191 DIV 2 (250)

Programming/SRM Practice 2009. 5. 30. 23:09
SRM 191 DIV 2 (250)
문제 요약 : 내기에서 이긴 사람이 받을 수 있는 돈을 Cents 단위로 반환하라. 

#include <iostream>

#include <vector>

using namespace std;

 

class BettingMoney

{

public:

           int moneyMade(vector <int> amounts, vector <int> centsPerDollar, int finalResult);

};

 

int BettingMoney::moneyMade(vector <int> amounts, vector <int> centsPerDollar, int finalResult)

{

           int sum = 0;

          

           for(int i = 0 ; i < amounts.size() ; i++)

                     if(i != finalResult) sum += amounts[i];

                    

           return (sum*100) - (centsPerDollar[finalResult]*amounts[finalResult]);

}

using system;

 

public class BettingMoney

{

    public int moneyMade(int[] amounts, int[] centsPerDollar, int finalResult)

    {

        int sum = 0;

 

        for (int i = 0; i < amounts.Length; i++)

            if (i != finalResult) sum += amounts[i];

 

        return (sum * 100) - (amounts[finalResult] * centsPerDollar[finalResult]);

    }

}



'Programming > SRM Practice' 카테고리의 다른 글

SRM 149 DIV 2 (250)  (0) 2009.09.15
SRM 307 DIV 2 (250)  (0) 2009.07.04
SRM 148 DIV 2 (250)  (0) 2009.05.27
SRM 146 DIV 2 (250)  (0) 2009.05.27
SRM 147 DIV 2 (250)  (0) 2009.05.27
:

SRM 148 DIV 2 (250)

Programming/SRM Practice 2009. 5. 27. 17:19
SRM 148 DIV 2 (250)
문제 요약 : 주어진 숫자를 그 숫자의 각 자리수로 나눌 수 있다면, 
그 횟수를 반환하라. 

#include <iostream>

using namespace std;

 

class DivisorDigits

{

public:

  int howMany(int number);

};

 

int DivisorDigits::howMany(int number)

{

  int temp = number;

  int cnt = 0;

  int n;

 

  while(temp >= 1)

  {

    n = temp % 10;

    temp /= 10;

    if(n != 0 && number % n == 0) cnt++;

  }

  return cnt;

}

'Programming > SRM Practice' 카테고리의 다른 글

SRM 307 DIV 2 (250)  (0) 2009.07.04
SRM 191 DIV 2 (250)  (0) 2009.05.30
SRM 146 DIV 2 (250)  (0) 2009.05.27
SRM 147 DIV 2 (250)  (0) 2009.05.27
SRM 370 DIV 2 (500)  (0) 2009.05.26
:

SRM 146 DIV 2 (250)

Programming/SRM Practice 2009. 5. 27. 15:51
SRM 146 DIV 2 (250)
문제 요약 : 주사위를 5번 던진 값이 주어지면,
그 중에서 같은 값의 경우는 그 값을 전부 더한다. 이 때 나올 수 있는 최대값을 구하라.

#include <iostream>

#include <vector>

using namespace std;

 

class YahtzeeScore

{

public:

  int maxPoints(vector <int> toss);

};

 

int YahtzeeScore::maxPoints(vector <int> toss)

{

  int sum = 0, max = 0;

 

  for(int i = 1 ; i < 7 ; i++)

  {

    for(int j = 0 ; j < toss.size() ; j++)

    {

      if(i == toss[j]) sum += toss[j];

    }

    if(sum > max) max = sum;

    sum = 0;

  }

 

  return max;
}

'Programming > SRM Practice' 카테고리의 다른 글

SRM 191 DIV 2 (250)  (0) 2009.05.30
SRM 148 DIV 2 (250)  (0) 2009.05.27
SRM 147 DIV 2 (250)  (0) 2009.05.27
SRM 370 DIV 2 (500)  (0) 2009.05.26
SRM 370 DIV 2 (250)  (0) 2009.05.26
:

SRM 147 DIV 2 (250)

Programming/SRM Practice 2009. 5. 27. 00:48
SRM 147 DIV 2 (250)
문제 요약 : 주어진 문장을 주어진 수만큼 shift한 후
결과 값을 반환하라.

#include <iostream>

using namespace std;

class CCipher

{

public:

  string decode(string cipherText, int shift);

};

 

string CCipher::decode(string cipherText, int shift)

{

  string res = "";


  
for(int i = 0 ; cipherText[i] ; i++)

    if(cipherText[i] - shift < 'A')  res += cipherText[i] + 26 - shift;

    else  res += cipherText[i] - shift;


  
return res;
}

'Programming > SRM Practice' 카테고리의 다른 글

SRM 148 DIV 2 (250)  (0) 2009.05.27
SRM 146 DIV 2 (250)  (0) 2009.05.27
SRM 370 DIV 2 (500)  (0) 2009.05.26
SRM 370 DIV 2 (250)  (0) 2009.05.26
SRM 205 DIV 2 (250)  (0) 2009.05.26
: