Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 08.09.2013, 00:14   #11
Dimka-novitsek
Участник клуба
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Адрес: Запорожье
Сообщений: 592
Репутация: 15
По умолчанию

cout << c.GetAge();

А что это за c. ? У меня вроде такого нету, и это наверно ошибка.
Dimka-novitsek вне форума   Ответить с цитированием
Старый 08.09.2013, 00:16   #12
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Получается конфликт:

Код:
Cat(int initialAge = 5);
Код:
Cat() {
        itsAge = 0;
        B = 8;
    };
При вызове Cat cat(); не понятно какой будет вызываться. Один убрать нужно.
8Observer8 вне форума   Ответить с цитированием
Старый 08.09.2013, 00:17   #13
Dimka-novitsek
Участник клуба
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Адрес: Запорожье
Сообщений: 592
Репутация: 15
По умолчанию

Или это обьект? Обьект c?
Dimka-novitsek вне форума   Ответить с цитированием
Старый 08.09.2013, 00:17   #14
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Цитата:
Сообщение от Dimka-novitsek Посмотреть сообщение
Или это обьект? Обьект c?
Да, именно так.
8Observer8 вне форума   Ответить с цитированием
Старый 08.09.2013, 00:20   #15
Dimka-novitsek
Участник клуба
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Адрес: Запорожье
Сообщений: 592
Репутация: 15
По умолчанию

Да, вот оно что может выйти! Это я хотел для опыта перегрузить конструктор. Глянуть, что будет.

Но я , какм я думал, не обращался ни к какому конструктору в строке Cat объект;

Я, вроде, создавал обьект!

А у вас получилось! Cat c();. Так... Обьект необходимо создавать строго в майне?

Последний раз редактировалось Stilet; 08.09.2013 в 10:47.
Dimka-novitsek вне форума   Ответить с цитированием
Старый 08.09.2013, 00:22   #16
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Даже если убрать один конструктор, всё равно ошибка:

Цитата:
main.cpp:64:15: error: request for member 'GetAge' in 'c', which is of non-class type 'Cat()'
Код:
#include <string> 
#include <iostream> // для объекта cout
using namespace std;

class Cat {
public:
    Cat(int initialAge = 5);
    ~Cat();
    int GetAge() const; // метод доступа const функция доступа к данным-членам класса без права их изменения
    void SetAge(int age);
    //void Meow();

    void Wydam() {
        Bam();
    }; //статический метод
    int Bgsamm();

//    Cat() {
//        itsAge = 0;
//        B = 8;
//    };

private:
    int itsAge; // статические переменные класса (Статическое поле)
    int B;

    void Bam() {
        cout << "Wydam\n";
        int BG = itsAge + B;
        cout << BG;
    }

};

int Cat::GetAge() const {
    return itsAge;
}

// конструктор класса Cat
Cat::Cat(int initialAge) {
    itsAge = initialAge;
    cout << "Cat constructor\n";
}

Cat::~Cat() // деструктор, который не выполняет никаких действий
{
    cout << "Cat destructor\n";
}

int Cat::Bgsamm() {
    return (itsAge++);
}

int main(int argc, char** argv) {
    
    Cat c();
    cout << c.GetAge();
    
    return 0;
}
8Observer8 вне форума   Ответить с цитированием
Старый 08.09.2013, 00:26   #17
Dimka-novitsek
Участник клуба
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Адрес: Запорожье
Сообщений: 592
Репутация: 15
По умолчанию

Вот это да...?

Я с двумя конструкторами не мог таки создать обьект, даже в майне! А с одним обьект создается.
Код:
int main()
 {
     Cat Frisky; 
     Frisky.Meow();
     Cat объект;
  //    Frisky.itsAge = 7; // переменная itsAge закрыта
	void объект::Метод (int целая=100;) //обычный метод
    {целая=целая+initialAge; cout << целая;cout << "  целая\n";}	
    cout << объект.GetAge();
    return 0;
 }
Это значит, что создавая обьект, мы обращаемся к конструктору, а не классу!!!!!



Спасибо!!!!!!

Фух......

Однако, интересно!!

Последний раз редактировалось Stilet; 08.09.2013 в 10:48.
Dimka-novitsek вне форума   Ответить с цитированием
Старый 08.09.2013, 08:47   #18
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Ха-ха, оказывается компилятор считает, что такая эта запись Cat c(); - это объявление прототипа функции. Функция, которая возвращает объект типа Cat. Поэтому нужно писать:
Код:
Cat c;
И один конструктор я закомментил:

Код:
#include <string> 
#include <iostream> // для объекта cout
using namespace std;

class Cat {
public:
    Cat(int initialAge = 5);
    ~Cat();
    int GetAge() const; // метод доступа const функция доступа к данным-членам класса без права их изменения
    void SetAge(int age);
    //void Meow();

    void Wydam() {
        Bam();
    }; //статический метод
    int Bgsamm();

//    Cat() {
//        itsAge = 0;
//        B = 8;
//    };

private:
    int itsAge; // статические переменные класса (Статическое поле)
    int B;

    void Bam() {
        cout << "Wydam\n";
        int BG = itsAge + B;
        cout << BG;
    }

};

int Cat::GetAge() const {
    return itsAge;
}

// конструктор класса Cat
Cat::Cat(int initialAge) {
    itsAge = initialAge;
    cout << "Cat constructor\n";
}

Cat::~Cat() // деструктор, который не выполняет никаких действий
{
    cout << "Cat destructor\n";
}

int Cat::Bgsamm() {
    return (itsAge++);
}

int main(int argc, char** argv) {
    
    Cat c;
    cout << c.GetAge() << endl;
    
    return 0;
}
Код улучшать и улучшать нужно. Начнём с того , что так не принято писать:

Код:
    Cat(int initialAge = 5);
Код:
// конструктор класса Cat
Cat::Cat(int initialAge) {
    itsAge = initialAge;
    cout << "Cat constructor\n";
}
Нужно вот так инициализировать внутренние (скрытые в private) члены класса:

Код:
Cat(int initialAge = 5) : itsAge(initialAge) {};
Переменную B тоже нужно инициализировать. А что означает B? int B;

Код:
Cat(int initialAge = 5, int b = 8) : itsAge(initialAge), B(b) {};

Последний раз редактировалось 8Observer8; 08.09.2013 в 09:26.
8Observer8 вне форума   Ответить с цитированием
Старый 08.09.2013, 11:48   #19
Dimka-novitsek
Участник клуба
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Адрес: Запорожье
Сообщений: 592
Репутация: 15
По умолчанию

Спасибо!!!
Dimka-novitsek вне форума   Ответить с цитированием
Старый 08.09.2013, 13:43   #20
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
Репутация: 41
По умолчанию

28Observer8, объявление функции внутри функции??
Igor95 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу прощения. Но у меня опять проблема. Написал код но что то неправельно потправте меня. Sergey 23 Visual C++ 2 15.09.2012 19:59
CheckBox, что-то у меня не получается... Snekich Microsoft Office Excel 2 18.12.2011 20:12
Меня что, кто-то атакует? Altera Свободное общение 9 03.10.2010 18:34
Меня хакнули, что делать? Alex Cones Свободное общение 6 04.03.2010 00:14
что-то у меня не получается dinozavr Помощь студентам 10 22.04.2009 21:45


23:04.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.