기본 콘텐츠로 건너뛰기

C++공부(템플릿클래스 예제)

//PFArray.h
#ifndef PFArray_H
#define PFArray_H

namespace PFArraySavitch
{
template<class T>
class PFArray
{
public:
PFArray();
PFArray(int capacityValue);
PFArray(const PFArray<T>& pfaObject);

void addElement(T element);
//선행조건: 배열은 가득차있지않다.
//사후조건: 원소가 추가되었다.

bool full() const;

int getCapacity() const;
int getNumberUsed() const;

void emptyArray();
//사용된 원소의 수를 0으로 다시 설정하여 배열을 효과적으로 비게한다.
T& operator[](int index);

PFArray<T>& operator =(const PFArray<T>& rightSide);

virtual ~PFArray();

private:
T * a; //T형의 배열을 위한 것
int capacity;// 배열크기
int used;
};
}

#endif
////////////////////////////////////////////////////////////////////////////////////////////
//PFArray.cpp


#include<iostream>
#include"PFArray.h"
using std::cout;

namespace PFArraySavitch
{
template<class T>
PFArray<T>::PFArray() : capacity(50), used(0)
{
a = new T[capacity];
}

template<class T>
PFArray<T>::PFArray(int capacityValue) : capacity(capacityValue), used(0)
{
a = new T[capacity];
}

template<class T>
PFArray<T>::PFArray(const PFArray<T>& pfaObject)
: capacity(pfaObject.getCapacity()), used(pfaObject.getNumberUsed())
{
a = new T[capacity];
for (int i = 0; i < used; i++)
a[i] = pfaObject.a[i];
}

template<class T>
void PFArray<T>::addElement(T element)
{
if (used >= capacity)
{
cout << "Attempt to exceed capacity in PFArray.\n";
exit(1);
}
a[used] = element;
used++;
}

template<class T>
bool PFArray<T>::full() const
{
return (capacity == used);
}

template<class T>
int PFArray<T>::getCapacity() const
{
return capacity;
}

template<class T>
int PFArray<T>::getNumberUsed() const
{
return used;
}
template<class T>
void PFArray<T>::emptyArray()
{
used = 0;
}

template<class T>
T& PFArray<T>::operator[](int index)
{
if (index >= used)
{
cout << "Illegal index in PFArray.\n";
exit(1);
}
return a[index];
}

template<class T>
PFArray<T>& PFArray<T>::operator =(const PFArray<T>& rightSide)
{
if (capacity != rightSide.capacity)
{
delete[] a;
a = new T[rightSide.capacity];
}
capacity = rightSide.capacity;
used = rightSide.used;
for (int i = 0; i < used; i++)
{
a[i] = rightSide.a[i];
}
return *this;
}

template<class T>
PFArray<T>::~PFArray()
{
delete[] a;
}

}


댓글

이 블로그의 인기 게시물

CATIA VBAとは

私も素人なので詳しくわかっているのはないけれども 今一ヶ月前から仕事を始めました。 普通VBAといえばEXCELの方を考える人が一般的だと思います。 VBAはVisual Basic Applicationの訳語で、 Microsoft社が作った言語です。 主にマクロ作りに使用されていて、今の私がしている仕事もそうです。 CATIA側でVBAを使う人があんまりなさそうで、 ネットにも資料が少なかったです。 それでぐぐりながら、CATIA VBA Referenceを参照しながらコーディングをしました。 初心者に見てほしいのはCATIA VBA ReferenceとCATIAの中にあるCATIA VBA HELP、最後にマクロ記録機能です。 この三つを見ながら、しながら作業をすればもっと理解しやすいじゃないかと思います。 まずはCATIA VBA Referenceですが、GOOGLEでそのまま検索すれば出ます。 リンクは http://catiadoc.free.fr/online/interfaces/main.htm です。 こちらでCATIA VBAで使われるオブジェクトとかオブジェクトが持っている関数とかが分かります。 多分VBAはどこから開くのかわかっているとは思うんですが、ツールタブで確認できます。 そして二つ目がCATIA VBA HELPです。 ここにはCATIAオブジェクトの構造とかREFERENCEサイトのように関数とオブジェクトの使い方とかパラメータについて表れています。 最後にマクロ記録機能です。 これは結構いいものですが、私が作ろうとしていることを記録を実行してシミュレーションすればコードが自動で作られます。 これを利用してCATIAのある機能についてAPIがあるかどうか確認もできますし、早くコードを作るのに役に立ちます。 一応ここまでに..‼ 明日出社しなきゃ。。 最初にも言いましたけど、私は素人なので間違った部分が多いかもしれません。 気づきの点がありましたらいつでもどうぞ!