Описать Функцию В Абстрактном Классе

Тема в разделе "C/C++/C#", создана пользователем aibalit, 5 июн 2014.

  1. aibalit

    aibalit New Member

    Регистрация:
    5 июн 2014
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте. Есть код и нужно сделать так, чтобы перегрузки операторов + и > были описаны в абстрактном классе.
    Оператор сложения: c[j]=(a[j]+b[j])/(amin+bmin), где amin и bmin - минимальные элементы в iой строке
    Оператор >: Истина, если среднее арифметическое икаждого столбца 1 матрицы > чем среднее арифметическое кадого столбца во 2ой матрице
    Код:
    Код (C++):
     
    #include "StdAfx.h"
    #include <iostream>
    #include <cstring>
    #include <fstream>
    #include <locale>

    using namespace std;

    class Matrix {
    public:
    int size;
    int elSize;
    char **values; //память для хранения элементов различного типа

    Matrix(): size(0), elSize(0), values(0) {}

    Matrix(int els): size(0), elSize(els), values(0) {}

    Matrix(int s, int els)
    {
    size = s;
    elSize = els;
    values = new char*[size];

    for (int i = 0; i < size; ++i) {
    values = new char[size*elSize];
    }
    }

    Matrix(const Matrix &m) //конструктор копирования
    {
    delete[] values;
    size = m.size;
    values = new char*[size];
    int rowSize = size * elSize;

    for (int i = 0; i < m.size; ++i) {
    values = new char[rowSize];
    memcpy(values, m.values, rowSize);
    }
    }

    ~Matrix()
    {
    delete[] values;
    }

    void operator=(const Matrix &m);

    void operator++(); //префиксный инкремент

    void operator++(int) //постфиксный инкремент
    {
    operator++(); //делать то же самое, что и при префиксном
    }

    void operator--(); //префиксный декремент

    void operator--(int) //постфиксный декремент
    {
    operator--();
    }

    virtual void out1(ostream& os, int i, int j) = 0;
    virtual void in1(istream& is, int i, int j) = 0;

    void out(ostream& os)
    {
    for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size; ++j) {
    out1(os, i, j);
    os << ' ';
    }
    os << endl;
    }
    }

    void in(istream& is)
    {
    for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size; ++j) {
    in1(is, i, j);
    }
    }
    }
    };

    class MatrixFloat : public Matrix
    {
    public:
    MatrixFloat(): Matrix(sizeof(float)) {}
    MatrixFloat(int size): Matrix(size, sizeof(float)) {}

    void out1(ostream& os, int i, int j)
    {
    os << *(float*)&values[j*elSize];
    }

    void in1(istream& is, int i, int j)
    {
    is >> *(float*)&values[j*elSize];
    }
    friend MatrixFloat operator+(MatrixFloat& a,MatrixFloat& b);
    friend MatrixFloat operator>(MatrixFloat& a, MatrixFloat& b);
    };
    MatrixFloat operator > (MatrixFloat& a, MatrixFloat& b)
    {
    bool z=1;
    float sumA, sumB, avarA, avarB;
    int k;
    for (int j = 0; j < a.size; ++j) {
    if (z == 0) {
    break;
    }
    sumA = 0;
    sumB = 0;
    avarA = 0;
    avarB = 0;
    k = 0;
    for (int i = 0; i < a.size; ++i) {
    sumA = sumA + a.values[j];
    sumB = sumB + b.values[j];
    k++;
    }
    avarA = sumA/k;
    avarB = sumB/k;
    if (avarA < avarB) {
    z = 0;
    }
    }
    return z;
    }
    MatrixFloat operator+(MatrixFloat& a,MatrixFloat& b)
    {
    if (a.size=b.size) {
    MatrixFloat temp; //сохраняем значения во временном массиве
    temp.size = a.size;
    temp.values = new char*[temp.size];
    float amin=a.values[0][0], bmin=b.values[0][0];
    for (int j = 0; j < a.size; ++j) {
    for (int i = 0; i < a.size; ++i) {
    if (amin > a.values[j]){
    a.values[j] = amin;
    }
    if (bmin > b.values[j]){
    b.values [j] = bmin;
    }
    }
    }
    for (int j = 0; j < a.size; ++j) {
    for (int i = 0; i < a.size; ++i) {
    if (amin+bmin==0){
    temp.values[j]=0;
    }
    else
    {
    temp.values[j] = (a.values[j] + b.values[j])/(amin+bmin);
    }
    }
    }
    return temp;
    }
    else
    {
    cout << "Размеры матриц не совпадают" << endl;
    return 0;
    }
    }
    void Matrix::eek:perator=(const Matrix &m)
    {
    delete[] values;
    size = m.size;
    values = new char*[size];
    int rowSize = size * elSize;

    for (int i = 0; i < size; ++i) {
    values = new char[rowSize];
    memcpy(values[i], m.values[i], rowSize);
    }
    }
    [code=cpp][/CODE][/i][/i]
     
Загрузка...
Похожие Темы - Описать Функцию Абстрактном
  1. smailvolf
    Ответов:
    1
    Просмотров:
    631
  2. sowhat
    Ответов:
    0
    Просмотров:
    652
  3. bratan
    Ответов:
    0
    Просмотров:
    1.678
  4. hirurg
    Ответов:
    6
    Просмотров:
    2.670
  5. ToxaRat
    Ответов:
    14
    Просмотров:
    3.374

Поделиться этой страницей