mam pliki:
modint.h:
class ModInt
{
public:
ModInt(int v = 0)
{
value = v;
if (modulus)
value %= modulus;
}
ModInt operator + (const ModInt& k) const
{
return ModInt(value + k.value);
}
ModInt operator - (const ModInt& k) const
{
return ModInt(value - k.value);
}
ModInt operator * (const ModInt& k) const
{
return ModInt(value * k.value);
}
bool operator == (const ModInt& k) const
{
return value == k.value;
}
const ModInt& operator += (const ModInt& k)
{
value = (value + k.value);
if (modulus)
value %= modulus;
return *this;
}
const ModInt& operator -= (const ModInt& k)
{
value = (value - k.value);
if (modulus)
value %= modulus;
return *this;
}
const ModInt& operator *= (const ModInt& k)
{
value = (value * k.value);
if (modulus)
value %= modulus;
return *this;
}
const ModInt& operator = (const ModInt& k)
{
value = k.value;
return *this;
}
const ModInt& operator = (int v)
{
value = v;
if (modulus)
value %= modulus;
return *this;
}
operator int()
{
return this->value;
}
protected:
int value;
static int modulus;
};
modint.cpp:
#include "ModInt.h"
int ModInt::modulus = 0;
klocek.h:
#pragma once
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
template<class T, int N>
class Klocek
{
public:
bool operator == (const Klocek& k);
const Klocek& operator += (const Klocek& k);
Klocek operator + (const Klocek& k) const;
const Klocek& operator -= (const Klocek& k);
Klocek operator - (const Klocek& k) const;
void WczytajZPliku(fstream& file);
T At(int n, int k);
T Diff(const Klocek& k) const;
private:
T m_cells[N][N];
};
klocek.cpp:
#include "Klocek.h"
template<class T, int N>
bool Klocek<T, N>::operator == (const Klocek& k)
{
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
if (m_cells[i][j] != k.m_cells[i][j])
return FALSE;
return TRUE;
}
template<class T, int N>
const Klocek<T, N>& Klocek<T, N>::operator += (const Klocek& k)
{
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
m_cells[i][j] += k.m_cells[i][j];
return *this;
}
template<class T, int N>
Klocek<T, N> Klocek<T, N>::operator + (const Klocek& k) const
{
Klocek& result = new Klocek();
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
result.m_cells[i][j] = m_cells[i][j] + k.m_cells[i][j];
return result;
}
template<class T, int N>
const Klocek<T, N>& Klocek<T, N>::operator -= (const Klocek& k)
{
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
m_cells[i][j] -= k.m_cells[i][j];
return *this;
}
template<class T, int N>
Klocek<T, N> Klocek<T, N>::operator - (const Klocek& k) const
{
Klocek& result = new Klocek();
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
result.m_cells[i][j] = m_cells[i][j] - k.m_cells[i][j];
return result;
}
template<class T, int N>
void Klocek<T, N>::WczytajZPliku(fstream& file)
{
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
file >> m_cells[i][j];
}
template<class T, int N>
T Klocek<T, N>::At(int n, int k)
{
return m_cells[i][j];
}
template<class T, int N>
T Klocek<T, N>::Diff(const Klocek& k) const
{
T v(0);
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
v += m_cells[i][j] - k.m_cells[i][j];
return v;
}
i teraz zaczynam robić szablon klocki.
akutalny wygląd klocki.h:
#pragma once
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <vector>
#include "Klocek.h"
using namespace std;
template<template<Klocek<typename, int>> typename C<T, N>>
class Klocki
{
public:
void WczytajZPliku(fstream& file);
C operator[] (int n);
int size();
private:
vector<C> m_boxes;
};
klocki ma zawierać wektor złożony z klocek<T, N>. linia:
template<template<Klocek<typename, int>> typename C<T, N>>
z pewnością jest zła. czy ktoś wie jak poprawnie zadeklarować klasę klocki?