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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2010, 16:17   #1
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию [C++] Классы

Код:
#include <stdio.h>

#include <conio.h>

#define StringSize 50

class BaseReservoir
{
	char cName[StringSize];
	float fVolume;
public:
	BaseReservoir( void );
	BaseReservoir( char cN[StringSize], float fV )
	{
		int iIndex;
		for( iIndex = 0; cN[iIndex] != 0; iIndex++ )
			cName[iIndex] = cN[iIndex];
		cName[iIndex] = 0;
		fVolume = fV;
	};

	~BaseReservoir(){};

	void Scan( BaseReservoir a )
	{
		printf( "Enter the reservoir name\n" );
		gets( a.cName );
		printf( "Enter reservoir volume\n" );
		scanf( "%f", a.fVolume );
	}

	virtual void Print( BaseReservoir a )
	{
		printf( "Reservoir name: %s", cName );
		printf( "Reservoir volume: %f", fVolume );
	}

};

class NaturalReservoir: public BaseReservoir
{
	int iPercentOfCleanliness;
public:
	NaturalReservoir( int iP ): BaseReservoir()// char cN[StringSize], float fV )
	{
		iPercentOfCleanliness = iP;
	};

	~NaturalReservoir(){};

	void Print( BaseReservoir a )
	{
		BaseReservoir::Print();
		printf( "Percent of cleanliness of a reservoir: %d%%", iPercentOfCleanliness );
	}
};

class ArtificialReservoir: public BaseReservoir
{
	char cDate[StringSize];
public:
	ArtificialReservoir( char cD[StringSize] ): BaseReservoir()// char cN[StringSize], float fV )
	{
		int iIndex;
		for( iIndex = 0; cD[iIndex] != 0; iIndex++ )
			cDate[iIndex] = cD[iIndex];
	};

	~ArtificialReservoir(){};

	void Print( ArtificialReservoir a )
	{
		BaseReservoir::Print();
		printf( "Date of creation of a reservoir: %s", cDate );
	}
};
вот есть заголовочный файл с классами

в маине обращаюсь так

Код:
#include "Reservoirs.h"
#include <stdio.h>
#include <conio.h>

void main()
{
	BaseReservoir a( "O\0" , 123 );
	a.Scan( a );
	a.Print( a );
		
	NaturalReservoir b( 40 );
	b.Print( b );

	ArtificialReservoir c( "12.12.2012" );
	c.Print( c );

	_getch();
}
Но чего-то ошибок много вообще не пойму

Последний раз редактировалось AquaticSoul; 09.06.2010 в 16:36.
AquaticSoul вне форума Ответить с цитированием
Старый 09.06.2010, 16:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ArtificialReservoir( char cD )
ArtificialReservoir( char* cD ) если не ошибаюсь строки в Си
Цитата:
BaseReservoir a( , );
Твоя задача не подразумевает создание экземпляра класса?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2010, 16:30   #3
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию

посмотри правленую
AquaticSoul вне форума Ответить с цитированием
Старый 09.06.2010, 16:39   #4
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

[QUOTE=AquaticSoul;549669]
Код:
#include <stdio.h>
iostream же
Код:
	char cName[StringSize];
std::string же
Код:
	BaseReservoir( void );
Обьявление есть, описания нет.
Код:
		BaseReservoir::Print();
Что же мы такое вызываем ? Нет такого в классе BaseReservoir
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 09.06.2010, 16:46   #5
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию

Код:
	BaseReservoir( void );
Это не влияет


добавил иострим то же самое

А что надо передавать тогда в
BaseReservoir::Print();
AquaticSoul вне форума Ответить с цитированием
Старый 09.06.2010, 16:53   #6
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Цитата:
Сообщение от AquaticSoul Посмотреть сообщение
Код:
	BaseReservoir( void );
Это не влияет
Ога, как знаете.
Цитата:
Сообщение от AquaticSoul Посмотреть сообщение
BaseReservoir::Print();
Что в объявлении метода написано, то и передавать.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 09.06.2010, 16:56   #7
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от ozo Посмотреть сообщение
Что в объявлении метода написано, то и передавать.
Я чего-то вообще не понимаю о.О
А саму эту строчку менять надо?
AquaticSoul вне форума Ответить с цитированием
Старый 09.06.2010, 17:14   #8
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

У вас есть :
Код:
	void  BaseReservoir::Print( BaseReservoir a )
	{
		printf( "Reservoir name: %s", cName );
		printf( "Reservoir volume: %f", fVolume );
	}
Код:
void  BaseReservoir::Print( BaseReservoir a );
Вы же пытаетесь вызвать BaseReservoir::Print();

Более точно писать не буду Думайте сами
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 09.06.2010, 17:22   #9
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию

Я пробовал, вставлять BaseReservoir a в качестве аргумента в двух потомственных классах, но не получается ничего о.О
AquaticSoul вне форума Ответить с цитированием
Старый 09.06.2010, 17:46   #10
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Передавать нужно указатель на объект нужного класса.
Если вы вызываете этот метод из производного класса, то передавать нужно this, но у вас передан объект нужного класса, поэтому передать нужно его.
Здесь правильно:
Код:
BaseReservoir a( "O\0" , 123 );
	a.Scan( a );
	a.Print( a );
в остальных двух вызов идет вот так
Код:
NaturalReservoir b( 40 );
	b.Print( b );

	ArtificialReservoir c( "12.12.2012" );
	c.Print( c );
Но методы в классе не до конца реализованы
Код:
void Print( BaseReservoir a )
	{
		BaseReservoir::Print(a); //нужен параметр
		printf( "Percent of cleanliness of a reservoir: %d%%", iPercentOfCleanliness );
	}
//------------------------------------------------

	void Print( ArtificialReservoir a )
	{
		BaseReservoir::Print(а); //аналогично
		printf( "Date of creation of a reservoir: %s", cDate );
	}
MaTBeu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы Nostalgia Помощь студентам 16 28.12.2009 09:01
Классы в С++ Stager Помощь студентам 4 05.05.2009 10:05
классы elenSV Помощь студентам 0 01.05.2009 19:33