Форум программистов, компьютерный форум CyberForum.ru

Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) - C++

Восстановить пароль Регистрация
 
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
08.05.2013, 19:33     Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) #1
Задача.
Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат.

Вообщем-то ни какой проблемы нету, дабы сделать некий класс для хранения этого номера и проверку к нему, но препод сказал, что данный номер может быть подан в различных видах, а значит класс должен быть универсальным и работать скажем не только со string, а и с char, int, byte. Вот тут то и заминка.
Как это лучше реализовать?

Это должен быть некий конструктор
C++
1
void NIP(.... NIP)
обрабатывающий все 4 типа данных.
Функция для чтения/записи этого номера
C++
1
bool setNIP(...)
опять таки работающая с 4мя типами данных + через bool дабы как он выразился, можно было отследить, была ли произведена запись вообще.
И что-то на проверку сего номера с возвратом тру/фолс при этом с static'ом
C++
1
static bool checkNIP(... NIP)
опять же под 4 типа данных.

Кто что подскажет, в какую сторону вообще думать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 19:33     Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат)
Посмотрите здесь:

C++ Написать класс Binary, который инкрементирует число, записанное в 2-чном виде
C++ Написать класс, который создает и выводит массив
Написать класс С++, который использует функции из библиотеки с C++
написать такой класс, который представляет собой двоичное число C++
C++ Класс Quadrangle (четырехугольник). Класс хранит Декартовы координаты четырех углов четырехугольника
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ssXXss
263 / 185 / 10
Регистрация: 15.01.2011
Сообщений: 668
08.05.2013, 19:46     Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
///samclass.h
 
template< class T >
class SamClass
{
    T tt;
public:
    SamClass(T & t):tt(t)
    {
 
    }
    ~SamClass(){}
};
///////////////////////
//main.cpp
#include"samclass.h"
 
void main()
{
  int i = 100500;
  char c = 0xff;
  SamClass<int> cs1(i);
  SamClass<char> cs2(c);
}
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
08.05.2013, 19:55  [ТС]     Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) #3
Но в данном случае мы вроде как задаем с чем будем работать, или я что-то не так понял?
У меня же не известно, что это будет, по крайней мере на этапе компиляции.

------
Как вариант, может после ввода, определить с чем работаем и сконвертить под определенный тип?
Но чет мне подсказывает, что препод за такой костыль скажет все равно писать под 4 типа(
ssXXss
263 / 185 / 10
Регистрация: 15.01.2011
Сообщений: 668
08.05.2013, 20:07     Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) #4
ну можно создать буфер размером в максимальное значение какого то из типов + небольшой запасец и на входе проверять размер типа и если все ок , то укладывать значение в буфер, если нет то предупреждать или кидать исключение.

Добавлено через 1 минуту
шаблон раскрывается на этапе компиляции .
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
08.05.2013, 20:11  [ТС]     Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) #5
На сколько я понял, по ходу того как он объяснял, он сказал сделать для каждого типа по функции, но это какой-то бред выходит... нельзя ли это как-то обойти через полиморфизм?
ssXXss
263 / 185 / 10
Регистрация: 15.01.2011
Сообщений: 668
08.05.2013, 20:15     Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) #6
он похоже имел ввиду перегрузку функций, типо такого
C++
1
2
3
4
5
6
7
  void fun(int i) { 
}
  void fun(float i) { 
}
void fun(char i) { 
}
...// и т.д.
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
08.05.2013, 20:27  [ТС]     Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) #7
скорее всего, осталось придумать параметры для определения типа...
сам nip это номер состоящий из 10 цифер, как говорит википедия, это что-то типа 123-456-78-90, который можно впихнуть как и в стринг так и в чар, в любом виде это как минимум 2 типа...
Идеи есть какие-то по этому поводу?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2013, 21:15     Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат)
Еще ссылки по теме:

C++ Создайте класс employee, который содержит имя (объект класса string) и номер (типа long) служащего
Написать класс, который бы инкапсулировал массив окружности C++
Создать класс, который считывает десятичное число и печатает его 2-ый, 8-ый и 16-ый эквивалент C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ssXXss
263 / 185 / 10
Регистрация: 15.01.2011
Сообщений: 668
08.05.2013, 21:15     Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) #8
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// *.h
 
class MyVariant
{
    std::string mystr;
    char * p_char;
    int size;
public:
    MyVariant()
    {
        p_char = NULL;
        size = 0;
    }
    explicit MyVariant(std::string & str)
    {
        mystr += str;
        p_char = NULL;
        size = 0;
    }
    explicit MyVariant(char * pch)//
    {
        if(!pch)
            return;
        size = strlen(pch);
        if(size)
        {
            p_char = new char[size];    
            memset(p_char,0,size);
            memcpy(p_char,pch,size);
        }
    }
    //... 
    ~MyVariant(){}
};
///// *.cpp
include *.h
void main{
   MyVariant mv0;
   char cc[] = "bbbbbbb---------mmmmmmmmmm";
   MyVariant mv1(cc);
   std::string str("576537567567567567567567567");
   MyVariant mv2(str);
}

надо только убрать реализацию из h в cpp

Добавлено через 21 минуту
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
// *.h
 
class MyVariant
{
    std::string mystr; // для  string  
    char * p_char; // для char[]
    int size; // размер char[] что бы в дальнейшем не париться
    .....// можно еще всяких типов воткнуть
public:
    MyVariant()// пустой конструктор , все обнуляем, дописав методы по аналогии с конструкторами можно апосля про инициализировать 
    {
        p_char = NULL;
        size = 0;
    }
    explicit MyVariant(std::string & str)// если вход парм.  string , то остальные обнуляем 
    {
        mystr += str;
        p_char = NULL;
        size = 0;
    }
    explicit MyVariant(char * pch)//если вход парм.  char* , вычисляем размер , копируем строку, остальные обнуляем 
    {
        if(!pch)
            return;
        size = strlen(pch);
        if(size)
        {
            p_char = new char[size];    
            memset(p_char,0,size);
            memcpy(p_char,pch,size);
        }
    }
    //... 
    ~MyVariant(){}
};
///// *.cpp
include *.h
void main{
   MyVariant mv0;//   пустой
   char cc[] = "bbbbbbb---------mmmmmmmmmm"; 
   MyVariant mv1(cc);//char*
   std::string str("576537567567567567567567567");
   MyVariant mv2(str);// string
}


Добавлено через 39 секунд
поставил коменты .
Yandex
Объявления
08.05.2013, 21:15     Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат)
Ответ Создать тему
Опции темы

Текущее время: 13:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru