Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2020, 12:43   #1
Korol12
Пользователь
 
Регистрация: 07.05.2020
Сообщений: 16
По умолчанию Помогите переделать код под виртуальный метод в классе

Доброго времени суток, нужно переделать код под виртуальный метод в классе.
Сразу огромное спасибо за то что уделите внимание и огромное спасибо вдвойне тому кто напишет.


Код:
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <algorithm>

#define razmer_bufera 20


using namespace std;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


int f(char* p, char* tip) {

    //проверка- int не int;
    if (!(strcmp(tip, "int"))) {
        if (atoi(p) && !strchr(p, '.'))
            printf("%s целое число\n", p);
        else if ((strlen(p) == 1) && p[0] == '0')
            printf("%s целое число\n", p);
        return 0;
    }

    //проверка- double не double;
    if (!(strcmp(tip, "float")) || !(strcmp(tip, "double"))) {
        if (!(atoi(p) && !strchr(p, '.')))
            if (!((strlen(p) == 1) && p[0] == '0'))
                if (atof(p))
                    printf("%s дробное число\n", p);
        return 0;
    }

    //проверка- char не char;
    if (!(strcmp(tip, "char"))) {
        if (!(atoi(p) && !strchr(p, '.')))
            if (!((strlen(p) == 1) && p[0] == '0'))
                if (!atof(p))
                    if (strlen(p) == 1)
                        printf("%s символ\n", p);
        return 0;
    }

    //проверка- char* не char*;
    if (!(strcmp(tip, "char*"))) {
        if (!(atoi(p) && !strchr(p, '.')))
            if (!((strlen(p) == 1) && p[0] == '0'))
                if (!atof(p))
                    if (!(strlen(p) == 1))
                        printf("%s строка\n", p);
        return 0;
    }

    return 1;
}





//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

int main(int argc, char* argv[]) {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    //Это типы
    char* tipi[4] = { (char*)"int", (char*)"double", (char*)"char", (char*)"char*" };

    printf("Вводи что хочешь\n");

    char proba[razmer_bufera];
    cin >> proba;


    for (int i = 0; i < 4; i++) {
        if (f(proba, tipi[i])) {
            printf("Что-то ты не то ввёл\n");
            break;
        }
    }

    getchar();


    return 0;
}
Korol12 вне форума Ответить с цитированием
Старый 11.05.2020, 21:18   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от Korol12 Посмотреть сообщение
виртуальный метод в классе.
а какой класс то? И какой метод?
Алексей1153 вне форума Ответить с цитированием
Старый 11.05.2020, 21:39   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

вот для примера, дальше сам

Код:
#include <windows.h>
#include <iostream>
#include <string>
#include <vector>

class CMyType
{
public:
	virtual void print()=0;
};

class CMyTypeInt:public CMyType
{
public:
	using val_type=int;
	val_type m_val{};
	CMyTypeInt(val_type m_val):m_val(m_val){}
	virtual void print()override{std::cout<<"целое число: "<<m_val<<'\n';}
};

class CMyTypeFloat:public CMyType
{
public:
	using val_type=float;
	val_type m_val{};
	CMyTypeFloat(val_type m_val):m_val(m_val){}
	virtual void print()override{std::cout<<"дробное число: "<<m_val<<'\n';}
};

class CMyTypeChar:public CMyType
{
public:
	using val_type=char;
	val_type m_val{};
	CMyTypeChar(val_type m_val):m_val(m_val){}
	virtual void print()override{std::cout<<"символ: "<<m_val<<'\n';}
};

class CMyTypeString:public CMyType
{
public:
	using val_type=std::string;
	val_type m_val{};
	CMyTypeString(val_type m_val):m_val(m_val){}
	virtual void print()override{std::cout<<"строка: "<<m_val<<'\n';}
};


int main(int argc, char* argv[])
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	//массив типов
	std::vector<CMyType*> tipi=
	{
		new CMyTypeInt{1},
		new CMyTypeFloat{2.1},
		new CMyTypeChar{'A'},
		new CMyTypeString{"abc"},
	};

	//распечатка
	for(auto* item:tipi)item->print();

	//освобождение памяти
	for(auto* item:tipi)delete item;
	tipi.clear();

	return 0;
}
Алексей1153 вне форума Ответить с цитированием
Старый 13.05.2020, 17:22   #4
Korol12
Пользователь
 
Регистрация: 07.05.2020
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
а какой класс то? И какой метод?
метод Output, Класс можно назвать любой
Korol12 вне форума Ответить с цитированием
Старый 13.05.2020, 18:12   #5
Korol12
Пользователь
 
Регистрация: 07.05.2020
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
вот для примера, дальше сам

Код:
#include <windows.h>
#include <iostream>
#include <string>
#include <vector>

class CMyType
{
public:
	virtual void print()=0;
};

class CMyTypeInt:public CMyType
{
public:
	using val_type=int;
	val_type m_val{};
	CMyTypeInt(val_type m_val):m_val(m_val){}
	virtual void print()override{std::cout<<"целое число: "<<m_val<<'\n';}
};

class CMyTypeFloat:public CMyType
{
public:
	using val_type=float;
	val_type m_val{};
	CMyTypeFloat(val_type m_val):m_val(m_val){}
	virtual void print()override{std::cout<<"дробное число: "<<m_val<<'\n';}
};

class CMyTypeChar:public CMyType
{
public:
	using val_type=char;
	val_type m_val{};
	CMyTypeChar(val_type m_val):m_val(m_val){}
	virtual void print()override{std::cout<<"символ: "<<m_val<<'\n';}
};

class CMyTypeString:public CMyType
{
public:
	using val_type=std::string;
	val_type m_val{};
	CMyTypeString(val_type m_val):m_val(m_val){}
	virtual void print()override{std::cout<<"строка: "<<m_val<<'\n';}
};


int main(int argc, char* argv[])
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	//массив типов
	std::vector<CMyType*> tipi=
	{
		new CMyTypeInt{1},
		new CMyTypeFloat{2.1},
		new CMyTypeChar{'A'},
		new CMyTypeString{"abc"},
	};

	//распечатка
	for(auto* item:tipi)item->print();

	//освобождение памяти
	for(auto* item:tipi)delete item;
	tipi.clear();

	return 0;
}
Спасибо за ответ!

Последний раз редактировалось Korol12; 13.05.2020 в 18:40.
Korol12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Виртуальный метод и классы наследники. Вопросы Booma C# (си шарп) 5 10.11.2017 12:14
Виртуальный метод в наследнике класса Sofon Общие вопросы C/C++ 1 19.01.2014 15:48
Помогите переделать прогу с метода половинного деления на метод сканирования fox82 Помощь студентам 0 15.12.2013 10:18
Виртуальный метод просмотра, метод (сравнение символьных массивов) VitaliyH Общие вопросы C/C++ 2 03.05.2013 11:50
Абстрактный виртуальный деструктор в базовом классе. Oleg_SK Общие вопросы C/C++ 16 15.06.2010 20:38