класс

  • Автор темы kaffein
  • Дата начала
K

kaffein

#1
юди помогите с классами
вот задание :
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;
вот моя реализация
 

lazybiz

Well-known member
03.11.2010
1 339
0
#4
Тогда тебе подойдет вот такая инициализация:
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;
}
 
K

kaffein

#5
Тогда тебе подойдет вот такая инициализация:
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;
}
супер,спасибо большое :)