1. C++ 프로그래밍의 개발과정


C++ 언어로 구성된 프로그램의 개발 과정은 C++이 구현 되어져 있는 개발 도구에서 소스 프로그램을 작성한다. 

그 다음 해당 소스 프로그램이 작성 되어져 있는 파일을 컴파일 한다. 

컴파일을 하면 해당 소스 파일(.cpp)에서 목적 파일(.obj) 파일이 생성 되고 이 목적 파일에서 링킹 과정을 통해서 실행 파일(.exe)이 만들어진다. 

링킹 과정중에 C++ 라이브러리에서 참조하여 링킹 된다. 

실행시 오류가 발생하면 디버깅을 하기 위하여 다시 소스 프로그램을 수정하는 식으로 돌아가서 다시 컴파일을 한다.


2. 간단한 출력프로그램

   (출력소스, 실행결과, 주석: cout객체, namespace역활. std::의 의미 정리 )


#include <cstdlib>

#include <iostream>


using namespace std;


int main(int argc, char *argv[])

{

    std::cout << "Hello\n" << "첫번쨰 맛보기 입니다. " << endl;

    std::cout << "소프트웨어학과 PSB";


cout은 표준출력객체이다.

namespace는 말 그대로 이름공간 이라는 뜻으로 쉽게 생각할 수 있다.

예를들어 A회사와 B회사에 둘 다 C라는 이름을 가진 사람이 있으면 어떤 사람을 지칭하는지 중복이 되어 알기가 힘들기 때문에 사용해준다고 보면 된다.

이름 앞에 붙여진 std는 이름 공간이고 출력에 관여된 객체를 관리하고 있다.

:: 범위 지정 연산자는 소스코드나 이름공간 내의 함수나 변수를 지정하는데에 사용하는 연산자이다. 

std:: 는 std 이름공간안의 함수나 변수를 사용할수있게 지정한다는 것이다.  

 

     

    system("PAUSE");

    return EXIT_SUCCESS;



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

6. 함수중복과 static멤버  (0) 2018.05.15
5. 함수와 참조, 복사생성자  (0) 2018.05.03
4. 객체 포인터와 객체배열, 객체의 동적생성  (0) 2018.04.10
3. 클래스와 객체  (0) 2018.03.22
2. C++ 프로그래밍의 기본  (0) 2018.03.13

1. 상속과 생성자함수


(1) 예제 1 : 소스코드, 실행결과, 주석(A,B,C 클래스 중 이유)


class A{

public A(){

System.out.println("생성자 A");

}

}


class B{

public B(){

System.out.println("생성자 B");

}

}


class C{

public C(){

System.out.println("생성자 C");

}

}


public class testfifthseven {


public static void main(String[] args) {

//C 클래스의 c객체 생성

C c = new C();


//실행결과 생성자 C 라고 나오며 그 이유는 C 클래스는 외부로 부터 상속을 받은 것이 없기 때문임.

}


}



(2) 예제 2 : A,B,C 클래스가 상속관계에 있을 때 소스코드, 실행결과, 주석(실행결과가 나온 이유)


class A{
public A(){
System.out.println("생성자 A");
}
}

class B extends A{
public B(){
System.out.println("생성자 B");
}
}

class C extends B{
public C(){
System.out.println("생성자 C");
}
}

public class testfifthseven {

public static void main(String[] args) {
//C 클래스의 c객체 생성
C c = new C();

//C 클래스는 상속을 받지 않기 때문에 생성자 C라고 나옴
/*
C 클래스는 상위 클래스인 B 클래스를 상속받고 이 B 클래스는 
더 상위 클래스인 A 클래스를 상속 받는다. 이 때 서브 클래스의 생성자와
슈퍼 클래스의 생성자의 우선순위는 슈퍼 클래스의 생성자가 먼저 실행되기
때문에 생성자 A, B ,C 순으로 실행결과가 나오게 된다.
*/
}

}


클래스들이 상속관계에 있을 경우 클래스 내의 생성자들의 우선순위는 서브 클래스의 생성자가 실행되기 전 슈퍼 클래스의 생성자가 먼저 실행된다.


(3) 예제 3 : 명시적 호출 예제 소스코드, 실행결과, 주석(명시적 호출방법, super() 주의점)


class A{

public A(){ //

System.out.println("생성자 A");

}

public A(int x){ //

System.out.println("매개변수 있는 생성자 A");

}

}


class B extends A{

public B(){ //

System.out.println("생성자 B");

}

public B(int x){ //

super(x); //상위클래스에 매개변수가 있는 생성자를 명시적으로 호출함

System.out.println("매개변수 있는 생성자 B");

}

}


class C extends B{

public C(){ //

System.out.println("생성자 C");

}

}


public class testfifthseven {


public static void main(String[] args) {

//C 클래스의 c객체 생성

B b = new B(5); // B클래스의 객체 생성


/* 클래스의 상속간에 기본 생성자가 아닌 매개변수가 있는 생성자를 호출 하기 위해서 명시적 호출방법이 필요하다. 매개변수가 있는 생성자 내에 super() 명령어를 사용하면 매개 변수를 가진 슈퍼 클래스의 생성자를 호출할 수 있다. 이때 super() 명령어의 주의점으론 반드시 해당 생성자의 첫 라인에 와야한다. */

}


}




(4) 예제 4 : 프로그램 5-2 소스코드, 실행결과, 주석(결과에서 cp객체가 5,6,blue값을 전달하는데 왜 blue(5,6)으로 나왔는지에 대한 이유)


class Point{

private int x, y;

Point(){

this.x = this.y = 0;

}

Point(int x, int y){

this.x = x; this.y = y;

}

void showPoint(){

System.out.println("(" + x + "," + y + ")");

}

}


class ColorPoint extends Point {

private String color;

ColorPoint(int x, int y, String color){

super(x,y);

this.color = color;

}

void showColorPoint(){

System.out.print(color);

showPoint();

}

}


public class SuperEx{

public static void main(String[] args){

ColorPoint cp = new ColorPoint(5, 6, "blue");

cp.showColorPoint();

/*

5,6,blue를 매개변수로 전달 하는 과정에서 5,6은 상속받은 상위 클래스의

매개변수 생성자로 넘어가고 color는 ColorPoint 클래스 내에서 private

접근 지정자의 color에 들어가고 showPoint 함수에 의하여 불러오게 된다.

*/

}

}


2. 업캐스팅


(1) 개념 : 서브 클래스 객체가 슈퍼 클래스 타입으로 변환되는 것을 업캐스팅 이라고 한다.


(2) 예제 : 소스코드, 실행결과, 주석(업캐스팅이 적용된 설명)


class Person{

String name;

String id;

public Person(String name) {

this.name = name;

}

}


class Student extends Person{

String grade;

String department;

public Student(String name) {

super(name);

}


}


public class test513 {


public static void main(String[] args) {


Person p;

Student s = new Student("홍길동");


p = s;

/*

Person 클래스의 p 객체에 Student 클래스의 s 객체를

업캐스팅 시킴

*/

System.out.println(p.name);

/* 

그래서 p의 이름을 호출하였는데 s의 값이 p에 치환되서 s의 이름이

출력이 된다.

*/

s.grade = "A";

s.department = "컴퓨터";

System.out.println("등급 : " + s.grade);

System.out.println("학과 : " + s.department);

}








'basic > Java 8' 카테고리의 다른 글

[Java] Exception  (0) 2018.08.07
4. 클래스와 객체  (0) 2017.04.11
3. 반복문과 배열 그리고 예외처리  (0) 2017.03.31
2. 자바 기본 프로그래밍  (0) 2017.03.14
1. 자바시작  (0) 2017.03.07


1. 클래스의 개념 : 클래스란 객체를 만들어 내기 위한 설계 혹은 틀이다.


2. 객체의 개념 : 객체란 클래스에 선언된 모양 그대로 생성된 실체를 객체라 부르며 클래스의 인스턴스(instance)라고도 부른다. 객체와 인스턴스는 구별 없이 사용한다.


3. 객체지향이란 : 객체 지향이란 컴퓨터가 산업 전반에 활용됨에 따라 실세계에서 발생한 일들을 프로그래밍 해야 하는 경우가 많아지게 되고 이에 따라 실세계의 일을 보다 쉽게 프로그래밍 할 수 있는 방법이 절차 지향적인 언어와 비교되는 객체 지향적 언어이다.


4. 객체정의 예제


객 체

상 태

동 작

충전상태,소리,발열

발광하다,충전하다

인간

배고픔,아픔

소리지르다,섭취하다


5. 객체생성 예제(프로그램 4-1 소스코드, 실행결과, 주석: 클래스 구성, 객체 생성 순서 설명)


package exClass1;


public class Circle {


int radius; //속성

String name;

public double getArea(){ //메소드

return 3.14*radius*radius;

}



public static void main(String[] args){

//1. 객체생성

Circle pizza = new Circle(); //pizza 객체 생성

//2. 필드와 메소드에 도트 연산자.을 이용해서 접근

pizza.radius = 10;

pizza.name = "콤비네이션 피자";

double area = pizza.getArea(); //피자면적 계산

//3. 객체내용 출력

System.out.println(pizza.name + "의 면적은 " + area);

//2. 도넛을 만들어보자

Circle donut = new Circle();

donut.radius = 2;

donut.name = "까데기";

area = donut.getArea();

System.out.println(donut.name + "의 면적은 " + area);

}


}



클래스는 필드와 메소드로 구성되어지며 객체를 생성할때에는 객체를 생성한 뒤 해당 필드와 메소드에 도트 연산자 . 을 이용하여 접근하고 마지막으로 객체의 내용을 출력하면 된다.


6. 객체생성 예제2 (프로그램 4-2참조. rect객체, book객체를 생성하는 코드, 결과, 주석)


package exClass1;


public class Rectangle {

int width;

int height;

int getArea(){

return width*height;

}

public static void main(String[] args){

//1. 객체 생성

Rectangle nemo = new Rectangle();

//2. 필드와 메소드에 접근

nemo.width = 4; //너비와 높이의 초기값 지정

nemo.height = 5;

int area = nemo.getArea();

//3. 객체 내용 출력

System.out.println("해당 사각형의 면적은 " + area);

Rectangle book = new Rectangle();

book.height = 15;

book.width = 10;

System.out.println("책의 size = " + book.getArea() + "입니다.");

}


}



7. 생성자의 개념 : 생성자란 객체가 생성될 때 초기화를 위해 실행되는 메소드이다.


8. 생성자의 특징 : 

생성자의 특징은 다음과 같이 여러가지가 있다.

(1) 이름이 클래스 이름과 동일하다.

(2) 여러 개 작성할 수 있다.

ex) public class Circle{

public Circle(){...}        //매개 변수가 없는 생성자

public Circe(int r, String n){...}        //2개의 매개 변수를 가진 생성자

}

(3) 객체를 생설할 때 한 번만 호출된다.

(4) 리턴 타입을 지정할 수 없다.

(5) 생성자는 초기화 작업을 위하여 사용한다.


9. 생성자의 예제(4-3 소스코드, 결과, 주석)


package exClass1;


public class Circle {


int radius; //속성

String name;

//생성자 이름은 클래스 이름과 동일하다.

public Circle(){ //매개 변수가 없는 생성자

radius = 1; name = ""; //radius의 초기값은 1

}

//생성자는 리턴 타입이 없다. - 기본 생성자 

public Circle(int r, String n){ //매개 변수를 가진 생성자

radius = r; name = n; //생성자는 radius와 name필드 초기화

}

public double getArea(){ //메소드

return 3.14*radius*radius;

}



public static void main(String[] args){

//1. 객체생성

Circle pizza = new Circle(10,"자바피자"); //Circle 객체 생성, 반지름10

double area = pizza.getArea(); //피자면적 계산

//3. 객체내용 출력

System.out.println(pizza.name + "의 면적은 " + area);

//2. 도넛을 만들어보자

Circle donut = new Circle();//Circle 객체 생성, 반지름 1

donut.name = "도넛피자";

area = donut.getArea();

System.out.println(donut.name + "의 면적은 " + area);

}


}



10. 생성자와 this예제 (프로그램 4-5 소스코드, 결과(출력된 이유), (주석)생성자 함수 몇개, 특징(매개변수의 개수와 타입))


package mypractice;


public class Book {


String title;

String author;

void show() {

System.out.println(title + " " + author);

}

public Book(){

this("", "");

System.out.println("생성자 호출됨");

}

public Book(String title){

this(title, "작자미상");

}

public Book(String title, String author){

this.title = title;

this.author = author;

}

public static void main(String[] args) {


Book javaBook = new Book("Java", "황기태");

Book bible = new Book("Bible");

Book emptyBook = new Book();

bible.show();


}


}





생성자 함수는 매개변수의 개수와 타입을 찾아서 실행하는데 매개변수의 개수와 타입은 달라야한다.


11. static 멤버의 선언방법, 특징(표 4-2 참조)


static 멤버 선언방법 : class 내의 필드와 변수 앞에 static을 붙여서 사용

ex)    class Sample{

static int m;

static void g(){...}

}

특징 : static 멤버는 클래스당 하나 생성(공간적 특성), 클래스 로딩 시에 멤버 생성(시간적 특성), 동일한 클래스의 모든 객체들에 의해 공유된다.(공유의 특성)


12. 예제 4-11 소스코드, 실행결과


package exStatic;


class Calc{

public static int abs(int a){

return (a>0) ? a : -a;

}

public static int max(int a, int b){

return (a>b) ? a : b;

}

public static int min(int a, int b){

return (a>b) ? b : a;

}

}


public class CalEx {


public static void main(String[] args) {

/*클래스이름.멤버함수(abs) 가능한 이유 : abs 함수가 static으로 선언됨

static 멤버는 클래스 이름으로 접근이 가능함.*/

System.out.println(Calc.abs(-5));

System.out.println(Calc.max(10, 8));

System.out.println(Calc.min(-3, -8));


}


}



'basic > Java 8' 카테고리의 다른 글

[Java] Exception  (0) 2018.08.07
5. 상속  (0) 2017.05.12
3. 반복문과 배열 그리고 예외처리  (0) 2017.03.31
2. 자바 기본 프로그래밍  (0) 2017.03.14
1. 자바시작  (0) 2017.03.07

+ Recent posts