Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
#1

Функция, имя которой совпадает с именем класса - C++

02.07.2013, 08:42. Просмотров 638. Ответов 13
Метки нет (Все метки)

Вот например
C++
1
2
3
4
5
6
7
8
9
10
...
class e
{
      int a;
      float b;
public:
      //И здесь функция, имя которой равняется имени классу, с помощью которой мы инициализируем переменные а и b.
      // Что-то типа e::(int a, float b){}
};
...
Но к сожалению я не помню ее формулировки((. Никто не мог бы подсказать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2013, 08:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция, имя которой совпадает с именем класса (C++):

Как описывать функции, заданные в шаблоне класса, тип возвращаемого значения которых совпадает с именем класса - C++
Здравствуйте. А как описывать функции, заданные в шаблоне класса, тип возвращаемого значения которых совпадает с именем класса? Более...

Сборка библиотеки и ошибка "fatal error LNK1149: имя выходного файла совпадает с именем входного файла" - C++
при сборке библиотеки возникает такая ошибка LINK : fatal error LNK1149: имя выходного файла совпадает с именем входного файла, объясните...

Как вы шаблонном классе определить контейнер, тип которого совпадает с именем параметра шаблона? - C++
собсно template <class T> class perestanovki { public: T<int> v; }; int main () {

При перегрузке оператора для класса не получается использовать имя переменной такое же, как в описании класса - C++
Описал первый класс,затем - описал второй класс, используя первый,и когда начал перезагружать оператор для второго класса, вылезла...

Почему имя параметра конструктора, совпадающее с именем члена, не вызывает противоречий? - C++
struct T { T(int t): t(t) {} int t; }; int main(){ T t(1); cout << t.t << endl; return 0; ...

Создать файл с именем указанным пользователем и записать в него его же имя - C++
Необходимо создать файл с именем указанным пользователем и записать в него его же имя string name; cout<<"Введите имя: "; ...

13
zer0mail
2393 / 2025 / 201
Регистрация: 03.07.2012
Сообщений: 7,343
Записей в блоге: 1
02.07.2013, 09:01 #2
C++
1
e(int a1,float b1){a=a1;b=b1;}
1
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
02.07.2013, 09:15  [ТС] #3
Идет ошибка при попытке создания элемента класса.
IntelliSense: для класса "Employer" не существует конструктор по умолчанию
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.07.2013, 09:21 #4
Цитата Сообщение от Pepsy Посмотреть сообщение
//И здесь функция, имя которой равняется имени классу, с помощью которой мы инициализируем переменные а и b.
* * * // Что-то типа e:int a, float b){}
- ОМГ это же конструктор преобразования для класса

Добавлено через 3 минуты
лови вобщем
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
#include <iostream>
using namespace std;
 
class Employer
{
    private:
        int a;
        float b;
    public :
        Employer();       //конструктор по умолчанию
        Employer(int _a, float _b);//коснтруктор преобразования
};
 
Employer::Employer()
{
    a = 0;
    b = 0;
}
 
Employer::Employer(int _a, float _b)
{
    a = _a;
    b = _b;
}
 
int main()
{
    Employer(5, 6.3);
    return 0;
}
http://codepad.org/jwjc6136 и почтиай про ООП
Output:
No errors or program output.
2
Гром
210 / 129 / 11
Регистрация: 20.03.2009
Сообщений: 1,103
Записей в блоге: 16
Завершенные тесты: 1
02.07.2013, 09:34 #5
Примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Writer
{
public:
Writer(): name("Чукча"), age(34) {}   //Конструктор по умолчанию
Writer(const std::string& nm, int a): name(nm), age(a) {}   //Конструктор с параметрами
private:
std::string name;
int age;
};
 
void f()
{
Writer MegaWriter;   //Используется конструктор по умолчанию - Чукча-писатель
Writer HolmesFather("Sir Arthur Ignatius Conan Doyle", 71);   //Здесь и ниже - конструктор с параметрами
Writer MadamRo = Writer("J. K. Rowling", 47);
}
0
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
02.07.2013, 10:00  [ТС] #6
C++
1
2
3
4
5
6
7
8
9
10
int a;
char line[100];
cout<<"Введите кол-во"<<endl;
cin>>a;
for(int i=0; i<a; i++)
{
    cout<<"Введите ФИО "<<i+1<<endl;
    gets(line);
    cout<<line;
}
Вопрос: на 1 итерации цикла cout и gets() пропускаются, а на 2, 3 и т.д. - нет. В чем проблема??
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
02.07.2013, 10:15 #7
Pepsy, после ввода строки в буфере обмена остается клавиша enter - перенос каретки. На первой итерации он и записывается в line и выводится (cout не опускается, просто он выводит перенос строки). Этот enter остался после ввода строки "а". Я обычно делают так:
C++
1
2
3
cin >> a;
cin.ignore(); //игнорирует перевод каретки - удаляет её из буфера
// или можно gets(crap);, но перед этим char crap[10]; - 10 на всякий случай
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.07.2013, 10:18 #8
Pepsy, ввод коробит \n остающийся в буффере после того как нажимаем Enter
Думаю ты хотел сделать то что показываю ниже
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
using namespace std;
 
class Employer
{
    private:
        int  a;
        char fam[65];
    public :
        Employer();                  //ГЄГ®Г*ñòðóêòîð ГЇГ® óìîë÷Г*Г*ГЁГѕ
        Employer(int _a, char * _fam);//êîñГ*òðóêòîð ïðåîáðГ*çîâГ*Г*ГЁГї
    void Init(int _a, char * _fam);
    void Show();
};
 
Employer::Employer()
{
     a  = 0;
    *fam= 0;
}
 
Employer::Employer(int _a, char * _fam)
{
    Init(_a, _fam);
}
 
void Employer::Init(int _a, char * _fam)
{
    a = _a;
    strncpy(fam, _fam, 64);
}
 
void Employer::Show()
{
    cout<<"a  = "<<a<<endl;
    cout<<"fam= "<<fam<<endl;
}
 
int main()
{
    int i, a;
    char fam[65];
    Employer e[5];
    cout<<"\tINPUT  : "<<endl;
    for(i = 0; i < 5; i++)
    {
        cout<<"Employer #"<<i + 1<<" : "<<endl;
        cout<<"a  = ";cin>>a;cin.get();
        cout<<"fam= ";cin.getline(fam, 64);
        e[i].Init(a, fam);
    }
    cout<<"\tOUTPUT : "<<endl;
    for(i = 0; i < 5; i++)
    {
        cout<<"Employer #"<<i + 1<<" : "<<endl;
        e[i].Show();
    }
    cin.get();
    return 0;
}
1
Миниатюры
Функция, имя которой совпадает с именем класса  
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
02.07.2013, 12:41  [ТС] #9
Кликните здесь для просмотра всего текста
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ОМГ это же конструктор преобразования для класса

Добавлено через 3 минуты
лови вобщем
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
#include <iostream>
using namespace std;
 
class Employer
{
    private:
        int a;
        float b;
    public :
        Employer();       //конструктор по умолчанию
        Employer(int _a, float _b);//коснтруктор преобразования
};
 
Employer::Employer()
{
    a = 0;
    b = 0;
}
 
Employer::Employer(int _a, float _b)
{
    a = _a;
    b = _b;
}
 
int main()
{
    Employer(5, 6.3);
    return 0;
}
http://codepad.org/jwjc6136 и почтиай про ООП

А если я создаю массив элементов -
C++
1
Employer Man[150]
, то как вносить данные?
1
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.07.2013, 12:57 #10
Можно так:
C++
1
Employer Man[] = { Employer(1, 2), Employer(3, 4) };
или, если много элементов в массиве, то:

C++
1
2
3
4
5
for (int i=0; i<150; ++i)
   Man[i] = new Employer(1, 2);
// обращаться как Man[0]->, т.е. через стрелку вместо точки. Потом зачистить:
for (int i=0; i<150; ++i)
   delete Man[i];
1
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
02.07.2013, 13:09  [ТС] #11
Значит, так?
C++
1
2
3
4
5
6
7
8
Employer Man[150];
for(int i=0 ; i<150; i++)
{
Man[i]=new Employer(a, b);
}
...
for (int i=0; i<150; ++i)
   delete Man[i];
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.07.2013, 13:26 #12
Pepsy, не совсем. Man будет теперь массивом указателей, поэтому там нужна звездочка:
C++
1
Employer *Man[150];
И a, b тут: Man[i]=new Employer(a, b) - это ведь числа, которыми будут инициализированы переменные класса a и b, так? Если да, то верно.

Добавлено через 5 минут
Этот способ хорош тем, что объекты инициализируются сразу при "зарождении". Можно конечно без указателей, но тогда придется пользоваться дополнительными методами, которые будут присваивать значения внутренним переменным.
1
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
02.07.2013, 13:28  [ТС] #13
и последний вопрос - объясните, пожалуйста, создание структуры
C++
1
tm_year
с использованием библиотеки
C++
1
time.h
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.07.2013, 14:43 #14
Цитата Сообщение от Pepsy Посмотреть сообщение
если я создаю массив элементов -
Employer Man[150]
ну а я что выше показал?
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Employer e[5];
Добавлено через 5 минут
Цитата Сообщение от Pepsy Посмотреть сообщение
tm_year
- это не структура а одно из полей структуры tm * инициализирвоать текущем временем данную структуру можно так
C++
1
2
3
time_t t;
time(&t);
tm * ptm = localtime(&t);
1
02.07.2013, 14:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2013, 14:43
Привет! Вот еще темы с ответами:

Как сделать, чтобы функция класса могла работать с обьектами другого класса - C++
есть класс к примеру class One и класс к примеру class Two нужно чтобы элемент функция класса One могла работать в обьектами класа...

Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса? - C++
//Щас всё объясню. Так, имеем два класса, в одном я определил функцию-член. Все конструкторы и прочее //опущены для уменьшения кода ...

Описание класса с именем TRAIN - C++
Задание 1: Описание класса. Запишите описание класса с именем TRAIN, содержащего следующие поля: 1)название пункта назначения; ...

Описание класса с именем PERSON - C++
Описание класса. Запишите описание класса с именем PERSON, содержащего следующие поля: фамилия и инициалы; дата рождения...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.