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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2010, 09:45   #1
HenryL
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 24
Восклицание C++ Классы. Наследование

Приветствую всех участников форума! Требуется помощь.

Итак, задание
Написать программу, демонстрирующую работу с объектами двух типов: Т1 и Т2, для чего создать систему соответствующих классов. Каждый объект должен иметь идентификатор (в виде произвольной строки символов) и одно или несколько полей для хранения состояния объекта (один класс является потомком другого).
При необходимости в разрабатываемые классы добавляются дополнительные методы (например, конструктор копирования, операция присваивания и т. п.) для обеспечения надлежащего функционирования этих классов.

Объекты:
SymbString - произвольная строка символов.
BinString - двоичная строка.
Методы:
ShowOct(), ShowDec(), ShowHex() - показать значение объекта в разных системах исчисления.


Короче - в меню выбирается, что ввести - строку символов или бин. строку, затем программа переводит их в другие системы и показывает, что получилось.

Задание вообще не слишком понятное. Подскажите что тут должно быть потомком чего, как перевести из одной системы в другую (какую стандартную функцию использовать? с fscan не разобрался), и как это сделать со с т р о к о й?

Вот что=то пробовал писать, но не слишком успешно.

Код:
#include "stdafx.h" 
#include "conio.h"
#include "math.h"
#include "iostream" 
#include "stdlib.h"
#include <string.h>
using namespace std;
 
class T1
{
        public:
        char Binstr[100];
        T1 (); 
        void show ();
        void vvod();
        void menu();
        void ShowOct();
        void ShowDec();
        void ShowHex();
};
 
class T2:public T1
{
        public:
        char Symbstr[100];
        void makeBin();
        T2();
        void show ();
        void vvod();
        void menu();
        void ShowOct();
        void ShowDec();
        void ShowHex();
};
 
T1::T1()
{
        strcpy(T1::Binstr,Binstr);
}
 
void T1::vvod()
{
        cout<<"Введите строку"<<"\n";
        cin>>Symbstr>>"\n";
}
 
void T1::show()
{
        cout<<"Строка: "<<Binstr<<"\n";
}
 
void T2::makeBin()
{
        int Binstr=scanf(Symbstr bin);
}
 
 
 
void menu()
{
        cout<<"1:Ввод бинарной строки"<<"\n";
        cout<<"2:Ввод строки символов"<<"\n";
                cout<<"3:Перевод в восьмеричную систему"<<"\n";
                cout<<"4:Перевод в десятичную систему"<<"\n";
                cout<<"5:Перевод в шестнадцатеричную систему"<<"\n";
        cout<<"0:Выход"<<"\n";
}
 
int main ( )
{
        int men;
                m:
                menu();
                cin>>men;
        switch (men)
                {
                        case 1:
                                        vvod();
                        case 2:
                                        vvod();
                                        makeBin();
                        case 0: 
                                        goto m2;
                }
        m2:
        return 0;
}
Оно не работает...
Жду любых советов, подсказок, надеюсь на вашу помощь...
HenryL вне форума Ответить с цитированием
Старый 06.11.2010, 10:01   #2
HenryL
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 24
По умолчанию

Вообще плохо стало, как началась эта тема с классами, никак не могу разобраться, пожалуйста помогите.
HenryL вне форума Ответить с цитированием
Старый 06.11.2010, 10:22   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Наверное имелось ввиду что-то вроде:
Код:
// dadas.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <string>

class TString{
public:
		char *str;

	//TString(char* AStr){str=AStr;}
};

class SymbString:TString {
public:
	SymbString(char* AStr){
		
		str=AStr;
	}

	void ShowOct(){
		for(int i=0;i<strlen(str);i++){
			printf("%o",(int)str[i]);
		};printf("\n");
	}
};

class BinString :TString {
public:
	BinString (char* AStr){
		
		str=AStr;
	}

	void ShowOct(){
		int k;
		for(int i=0;i<strlen(str);i++){
			k|=(str[i]=='1')?1:0;
			k<<=1;
		}
		char c[255];
		itoa(k,c,8);
		printf("%s",c);
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	SymbString *s=new SymbString("123");
	BinString *s2=new BinString("1001101");
	s->ShowOct();
	s2->ShowOct();
	delete s;
	getchar();
	return 0;
}
Тут два класса наследуются от главного, у каждого класса свой метод вывода в 8-ричной системе
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.11.2010, 10:35   #4
HenryL
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 24
По умолчанию

Stilet, да, похоже на то. А я пытался SymbString сначала представить в двоичном виде, потом уже переводить в другие системы...
Код:
itoa()
с символьной строкой работать не будет?

Код:
for(int i=0;i<strlen(str);i++){
k|=(str[i]=='1')?1:0;
k<<=1;}
что делает этот цикл?

и вообще, не правильно переводит этот код... там косяки, как я понял, но сделать правильно пока не получается

Последний раз редактировалось Stilet; 08.11.2010 в 08:47.
HenryL вне форума Ответить с цитированием
Старый 08.11.2010, 08:54   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и вообще
Вот вот. А теперь про "Вообще":
1)
Цитата:
показать значение объекта в разных системах исчисления.
Это какое значение то? Сам объект это адрес на структуру полей. О каком значении идет речь?

2)
Цитата:
в меню выбирается, что ввести - строку символов или бин. строку, затем программа переводит их в другие системы и показывает, что получилось.
Вот вот. Строку!!!
itoa() переводит числа в строку, а не строку в другую строку.

Ты в точку попал сказав:
Цитата:
Задание вообще не слишком понятное.
Я бы даже тут слово "слишком" выбросил, так что я как понял так и написал - перевод байтов строки в :%?*;-ричные коды.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.11.2010, 15:29   #6
HenryL
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 24
По умолчанию

как я понял (может это не так), нужно перевести, предположим, число "1010111" (Bin) в восьмеричную, т.е. - "1010111 = 127". Но itoa(), насколько я понял из твоего поста, делает не это?

Последний раз редактировалось HenryL; 08.11.2010 в 15:31.
HenryL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наследование (классы) Rusl92 Помощь студентам 3 31.10.2010 20:31
классы.наследование.жидкости zhenya.ya Общие вопросы C/C++ 8 23.10.2010 14:13
C++ Классы (Наследование) werser Помощь студентам 3 15.12.2009 21:30
Классы(абстрактный и наследование) Пепел Феникса Общие вопросы C/C++ 6 02.11.2009 01:18
Классы и наследование. Scratch Общие вопросы C/C++ 9 27.09.2008 16:03