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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2017, 14:52   #1
Karych
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 49
По умолчанию классы - инициализация

Всем привет!
Ребят нужны рассуждения, что то я туплю...
является ли
Код:
public:
	Goods(char *, int, float);
конструктором по умолчани без аргументов? делаю на основе примера. там же вообще не должно быть аргументов? прост у мня все валиться на месте
Код:
	Goods *inputedGoods; 
	inputedGoods->Input();  //ввод значений
	inputedGoods->Print();  //вывод значений
без явной инициализации класса. почему не используется конструктор по умолчанию? в чем я не прав

привожу полностью код.
Код:
class Goods // имя класса
{
private:
	char name[30]; //название 
	int count; //количество
	float price; //цена

public:
	Goods(char *, int, float); //инициализация без аргументов
    void Print(void);
	void Input(void);
};

Код:
#include <stdlib.h>  // стандартные
#include <string.h>
#include <iostream>
#include <conio.h> 
#include "main.h"  //мой класс - товар
using namespace std;
	
Goods::Goods(char *name, int count, float price) // инициализая с аргументами
{	//присвоение
	strcpy(Goods::name, name);
	Goods::count=count;
	Goods::price=price;
};

void Goods::Print(void)
{
	cout<<"Goods Name: "<<name<<"   Count: "<<count<<"  Price: "<<price<<endl; //выводим поток
};

void Goods::Input(void)
{
	cout<<"Add New Goods..."<<endl;	
	cout<<"Enter Name: "<<endl;
	cin>>name;
	cout<<"Enter Count: "<<endl;
	cin>>count;
	cout<<"Enter Price: "<<endl;
	cin>>price;
};


int main(void)
{
	Goods *inputedGoods; 
        
	inputedGoods = new Goods("",0,0);  //инициализируем

	inputedGoods->Input();  //ввод значений
	inputedGoods->Print();  //вывод значений
	getch(); // Команда задержки экрана
};
Karych вне форума Ответить с цитированием
Старый 20.03.2017, 15:24   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
является ли
Как он им может являться, если у него 3 аргумента?

Цитата:
прост у мня все валиться на месте
Потому что вы не создали объект, а просто объявили указатель, который без инициализации равен фиг знает чему.

Цитата:
почему не используется конструктор по умолчанию?
1. потому что см. пункт выше
2. потому что его там нет, если вы объявили какой-нибудь конструктор, то компилятор прекращает самодеятельность и не генерит по дефолту - надо попросите его или напишите сами

Последний раз редактировалось p51x; 20.03.2017 в 15:26.
p51x вне форума Ответить с цитированием
Старый 20.03.2017, 15:36   #3
Karych
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 49
По умолчанию

4. Опишите конструктор объекта, аргументы которого будут инициализировать все данные объекта.
5. Опишите конструктор объекта по умолчанию (без аргументов) проинициализировав все данные.

Код:
private:
	char *name; //название 
	int count; //количество
	float price; //цена

public:
	Goods()
	{	
		name="";
		count=0; 
		price=0;
	};  по умолчанию

	Goods(char *gName, int gCount, float gPrice); с аргументами
верно ли начал?
Karych вне форума Ответить с цитированием
Старый 20.03.2017, 15:45   #4
Karych
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 49
По умолчанию

7. Ниже определите конструктор объекта инициализирующий все данные объекта значениями аргументов. В теле конструктора используйте функцию strcpy(стр1, стр2) для копирования строки название
Цитата:
Goods::Goods(char *gName, int gCount, float gPrice) // инициализая с аргументами
{ //присвоение
strcpy(Goods::name, gName);
Goods::count=gCount;
Goods:rice=gPrice;
};
корректно ли я рассуждаю?
Karych вне форума Ответить с цитированием
Старый 20.03.2017, 15:50   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Почти. Кто память в классе под строку выделять будет?
p51x вне форума Ответить с цитированием
Старый 21.03.2017, 14:22   #6
Karych
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 49
По умолчанию

Цитата:
char *name; //название
int count; //количество
float price; //цена

//конструктор объекта Person
Goods::Goods(char *gName, int gCount, float gPrice)
{
Goods::name=new char[30]; // Выделение памяти под строку
strcpy(Goods::name, gName); // Присваивание
count=gCount;
price=gPrice;
};


//конструктор объекта Goods по умолчанию
Goods::Goods()
{ //инициализируем данные
name=new char[30]; // Выделение памяти под строку
strcpy(name, "");
count=0;
price=0;
};
вот вроде и память выделяю. по умолчанию всеравно не инициализируется.
Karych вне форума Ответить с цитированием
Старый 21.03.2017, 14:37   #7
Karych
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 49
По умолчанию

не доходит как создать переменную на которую будет ссылаться основная переменная
Karych вне форума Ответить с цитированием
Старый 21.03.2017, 14:46   #8
Karych
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 49
По умолчанию

Алилуя) понял) я создавал потом не экземпляр класса а указатель на него, поэтому и обращался к нему не корректно...
Karych вне форума Ответить с цитированием
Старый 21.03.2017, 15:21   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Все ж работает https://ideone.com/V4mAuh или вы о другом?
p51x вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инициализация vibraxo Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 11.06.2013 03:39
Инициализация Aleksey1989 Общие вопросы Delphi 10 11.09.2010 21:50
Ошибка инициализация Krumyura Общие вопросы C/C++ 2 22.03.2010 14:08
Инициализация Krumyura Общие вопросы C/C++ 5 20.03.2010 23:37