for Robot Artificial Inteligence

13. Constructor

|

Copy Constructor

Main.cpp

#include <iostream>
#include "test.h"

using namespace std;
/* COPY CONSTRUCTOR */

int main()
{

    int a = 10;
    int b = a;

    a = 60;

    cout << "a : " << a << endl; //60
    cout << "b : " << b << endl; //10

    Test obj1(50, 100, 60);
    Test obj2 = obj1;

    obj2.x = 200;
    *(obj1.p) = 700;

    cout << "obj1.x " << obj1.x << endl;
    cout << "*(obj1.p) " << *(obj1.p) << endl;
    cout << "obj1.y " << obj1.y << endl << endl;

    cout << "obj2.x " << obj2.x << endl;
    cout << "*(obj2.p)" << *(obj2.p) << endl;
    cout << "obj2.y " << obj2.y << endl;


    return 0;
}


test.h

#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED

class Test
{
    public:
        int x; //50
        int y; //100
        int *p; //60
        Test(const Test &); //copy
        Test(int, int, int);
        ~Test();
};

#endif // TEST_H_INCLUDED

test.cpp

#include "test.h"

Test::Test(int x, int y, int value)
{
        this->x = x;
        this->y = y;
        this->p = new int(value); // because of in head file p is the *pointer
}
Test::~Test()
{
        delete p;
}
Test::Test(const Test & obj) //copy
{
    this->p = new int(*(obj.p)); //because of in head file p is the *pointer
    this->x = obj.x;
    this->y = obj.y;
}

(CONSTRUCTOR)[http://tcpschool.com/cpp/cpp_struct_intro]

  • 구조체(structure type)란 사용자가 C++의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입입니다.
  • 배열이 같은 타입의 변수 집합이라고 한다면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것입니다. 이때 구조체를 구성하는 변수를 구조체의 멤버(member) 또는 멤버 변수(member variable) 라고 합니다.
  • C++의 구조체는 변수뿐만 아니라 함수까지도 멤버 변수로 가질 수 있습니다
  • 또한, C++의 구조체는 타입일 뿐만 아니라, 객체 지향 프로그래밍의 핵심이 되는 클래스(class)의 기초가 됩니다
  • 코드와 함께 설명하겠습니다.
struct 구조체이름

{

    멤버변수1의타입 멤버변수1의이름;

    멤버변수2의타입 멤버변수2의이름;

    ...

};

Exercise

#include <iostream>

using namespace std;
/* DATA STRUCTURES */

struct personalData
{
    string name;
    string surname;
    string telephoneNumber;
    short age;
}a,b;
void test(personalData *);
int main()
{
    personalData person[5];
    a.age =50;

   // cout << a.age << endl;
    person[0].name = "Arkadiusz";
    person[1].name = "Wiola";
    person[0].surname = "Wlodarczyk";
    person[0].telephoneNumber = "606102340";
    person[0].age = 22;
/*
    cout << person[0].name << endl;
    cout << person[0].surname << endl;
    cout << person[0].telephoneNumber << endl;
    cout << person[0].age << endl;
*/
/*
    cout << (*person).name << endl;
    cout << (*&person[0]).name << endl;
    cout << (person+1)->name << endl;
*/
    personalData *p = person;
    personalData *p = person+1; // it is methods to select second array

    cout << p->name << endl;

    test(p); // test(person);

    cout << p->name << endl;
    return 0;
}
void test(personalData *person)
{
    person->name = "Agnes";
}

(friend class)[https://yeolco.tistory.com/116]

  • firend 클래스는 friend로 선언된 다른 클래스의 private 및 protected 멤버에 접근할 수 있습니다.
  • 특정 상황에서 클래스 내에 접근하지 못하도록 private 제한을 두었는데, 필요의 경우 해당 클래스나 함수에서 접근 가능하도록 사용하는것이 friend 클래스 및 함수입니다.

예제

#include <iostream>
#include <string>
using namespace std;

class Friend1 {
private :
    string name;

    friend class Friend2;
};

class Friend2{
public :
    void set_name(Friend1& f, string s) {
        f.name = s;
    }
    void show_name(Friend1& f) {
        cout << f.name << "\n";
    }
};

int main(void) {
    Friend1 f1;
    Friend2 f2;

    f2.set_name(f1, "열코");
    f2.show_name(f1);

    return 0;
}

Friend Class Exercise

main.cpp

#include <iostream>
#include "position.h"

using namespace std;

void setX(Position &, int);
int main()
{
    Position dog(10, 50);

    dog.getPosition();
    setX(dog, 1500);
    dog.getPosition();

    const Position house(100, 200);

    house.getPosition();
//    house.setPosition(444, 444);
    //house.getPosition();

    return 0;
}
void setX(Position & obj, int value)
{
    //Position &obj = dog;
    obj.x = value;
}

position.h

#ifndef POSITION_H_INCLUDED
#define POSITION_H_INCLUDED

class Position
{
    int x, y;
    public:
        Position(int,int);
        ~Position();
        void getPosition() const;
        void setPosition(Position &, int, int); // class 를 받고 인자를 받는다.
        friend void setX(Position &, int);
};

#endif // POSITION_H_INCLUDED

position.cpp

#include "position.h"
#include <iostream>

using namespace std;

Position::Position(int x, int y)
{
    this->x = x;
    this->y = y;
}
Position::~Position()
{

}

void Position::getPosition() const
{
    cout << "x : " << x << endl;
    cout << "y : " << y << endl;
}

void Position::setPosition(Position & obj, int x, int y)
{
    obj.x = x;  // 클래스 안에 변수들을 불러와 바꾼다.
    obj.y = y;
}


Comments