класс

Тема в разделе "C/C++/C#", создана пользователем kaffein, 14 апр 2011.

  1. kaffein

    kaffein Гость

    юди помогите с классами
    вот задание :
    1. реализировать конструктор по умолчанию, копирования и деструктор.
    2.конструкторы которые принимают количество елементов и их начальное значение, а другой количество елементов и указатель на данные, что сохраняются.
    3. реализировать оператор приведения до типа который сохраняет класс
    4.методы: получение количества елементов класс; добавить елемент; выдалить элемент; поиск подстроки в строке.
    5.Операторы :
    вектор operator += (вектор)
    вектор operator +=(<тип данних>)
    вектор operator = (вектор)
    вектор operator == (вектор)
    вектор operator != (вектор)
    <тип данних> operator [] (int i)
    Дружні функції
    вектор operator +(вектор, вектор)
    вектор operator +(вектор, <тип данних>)
    вектор operator +(<тип данних>, вектор)
    Код (C++):
    #include "stdafx.h"
    #include "stdio.h"
    #include <time.h>
    #include <stdlib.h>

    class vector
    {
    private:
    int* m;
    int size;
    public :
    vector(int n = 100);
    vector( vector &vector2);
    explicit vector(int *data, int size);
    explicit vector(int size,int val);
    ~vector();

    int GetSize();
    int Push(int val);
    void Pop();
    int Push_x(int x);
    int GetPos(int val);
    void print();
    vector operator = (vector& vector2);
    vector operator += (const vector& s);//+
    vector operator += (const int val);//+
    vector operator = (const vector& s);//+
    int operator == (const vector& s);//+
    int operator != (const vector& s);//+
    vector operator [] (int n);


    };
    vector::vector( int n )
    {  
    if (n < 0) n = 0;
    size = n;
    m = NULL;
    if(size)
    if( (m = new int[size]) == NULL)
    size = 0;
    }
    vector::vector( vector& vector2)
    {
    size = vector2.size;
    m = NULL;
    if(size)
    if( (m =new int[size]) == NULL)
    size = 0;
    else
    for(int i = 0; i<size;i++)
    *(m + i) = vector2.m[i];
    printf("kopia stvorena !");
    }
    vector::~vector()
    {
    delete[] m;
    }
    vector::vector(int *data, int size)
    {
    this->size = size;
    m = NULL;
    if(size)
    if( (m =new int[size]) == NULL)
    size = 0;
    else
    for(int i = 0; i<size;i++)
    *(m + i) = data[i];
    }
    vector::vector(int size,int val)
    {
    this->size = size;
    m = NULL;
    if(size)
    if( (m =new int[size]) == NULL)
    size = 0;
    else
    for(int i = 0; i<size;i++)
    *(m + i) = val;

    }
    inline int vector::GetSize(){return size;}
    inline int vector::Push(int val)
    {
    *m = val;
    size ++;
    return val;
    }

    void vector::Pop()
    {
    size = 0;
    delete[] m;
    }

    int vector::Push_x(int x)
    {
    for(int i=0;i<size;i++)
    if(m[i]==x)
    {
    if(i==(size-1))
    {
    m[i]=NULL;
    size--;
    break;
    }
    for(int j=i;j<size-1;j++)
    {
    m[j]=m[j+1];
    }
    size--;
    }



    return *m;

    }
    int vector::GetPos(int val)
    {
    for(int i = 0; i<size; i++)
    if(m[i] == val)
    return i;
    }
    void vector::print()
    {
    printf("%d",m);
    }

    vector vector::operator += (const vector& vector2)
    {
    if (size != vector2.size)
    return *this;
    for (int i = 0; i < size; i++)
    *(this->m + i) += *(vector2.m + i);
    return *this;
    }

    vector vector::operator += (int value)
    {
    int i;
    for (i = 0; i < size; i++)
    *(this->m + i) += value;
    return *this;
    }

    vector vector::operator = (vector& vector2)
    {
    if (this == &vector2) return *this;
    size = vector2.size;
    m = NULL;
    if (size)
    if ((m=new int[size]) == NULL)
    size = 0;
    else
    for (int i = 0; i < size; i++)
    *(m + i) = vector2.m[i];
    return *this;
    }

    int vector::operator == (const vector& vector2)
    {
    if (size != vector2.size) return 0;
    for (int i = 0; i < size; i++)
    {
    if (*(this->m + i) != *(vector2.m + i))
    return 0;
    }
    return 1;
    }

    int vector::operator != (const vector& vector2)
    {
    if (size != vector2.size) return 1;
    for (int i = 0; i < size; i++)
    {
    if (*(this->m + i) != *(vector2.m + i))
    return 1;
    }
    return 0;
    }

    vector vector::operator [] (int n)
    {
    if (n < 0) n = 0;

    if (n >= size) n = size - 1;
    return *( this -> m + n );
    }
    void rand_vect( vector& x,int size)
    {
    for (int i=0; i<size; i++)
    {
    x.Push(rand()%10+1);
    }
    }
    void print( vector& x,int size)
    {
    for( int i=0; i<size; i++)
    {
    x.print();
    }
    }

    int main()
    {
    vector x(10);
    rand_vect(x,10);
    print(x,10);
    system("pause");
    return 0;
    вот моя реализация
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Все элементы должны инициализироваться одним значением или разными?
     
  3. kaffein

    kaffein Гость

    разными значениями
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Тогда тебе подойдет вот такая инициализация:
    Код (C++):
    #include <windows.h>
    #include <stdio.h>
    #include <stdarg.h>

    class A {
    public:

    int size;
    int *   data;

    A( int n, ... ) {   // кол-во элементов и их начальные значения
    va_list ap;
    size = n;
    data = new int [n];
    if ( data ) {
    va_start( ap, n );
    for (; n > 0; n-- ) data[size - n] = va_arg( ap, int );
    va_end( ap );
    }
    }

    ~A() {
    if ( data ) delete [] data;
    }

    void print() {
    printf( "total args: %d\nargs: ", size );
    for ( int i = 0; i < size; i++ ) {
    printf( "%d ", data[i] );
    }
    printf( "\n" );
    }
    };

    int main()
    {
    A   a( 0 );
    a.print();

    A   b( 1, 2 );
    b.print();

    A   c( 2, 3, 4 );
    c.print();

    A   d( 3, 4, 5, 6 );
    d.print();

    A   e( 4, 5, 6, 7, 8 );
    e.print();

    return 0;
    }
     
  5. kaffein

    kaffein Гость

    супер,спасибо большое :)
     
Загрузка...

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