Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
SatOleg
0 / 0 / 0
Регистрация: 05.08.2011
Сообщений: 30
#1

Statiс Поля Класса - C++

05.08.2011, 15:48. Просмотров 777. Ответов 9
Метки нет (Все метки)

Имея класс
C++
1
2
3
4
5
6
7
8
9
10
class Worker
{
    static const int Part2 = 0x22;
    static const int Part3 = 0x44;
public:
        static int Part1;
    int part1(){return [B]Part1[/B];} // не могу обратиться к полю
    int part2(){return Part2;}
    int part3(){return Part3;}
};
// Вне класса тоже не могу обратиться

Worker::Part1 = 0x11;

Вполне вероятно, что мое заблуждение очень глупое, спс если сможете помочь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2011, 15:48     Statiс Поля Класса
Посмотрите здесь:

Поля класса - C++
здравствуйте ) извините заранее если глупый вопрос :sorry: я просто новичок) class mycl { public: char a, b; }; ...

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

Статические поля класса - C++
class mi { int a,b; public: mi(int a, int b) : a(a),b(b) {} void sw() { std::cout<<a<<" - "<<b<<std::endl; } ...

Поля дружественного класса - C++
есть примерно такой код class ClientAuthorization { public: int count; //считается в конструкторе, не буду писать весь код,...

Статические поля класса - C++
Не подскажете как инициализировать статический массив? Но чтобы я сам мог ввести этот массив.

Вывести поля класса - C++
Положим, есть класс A: class A { public: int a,b,c,d; // . . . какие-то функции } Как перегрузить оператор << чтобы можно...

Static поля класса - C++
объясните нубу, вот имею я такой код на С# class WebResponse { public static string GET(string Url, string Data) ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silentnuke
Android Programmer
138 / 139 / 5
Регистрация: 08.12.2010
Сообщений: 421
05.08.2011, 15:50     Statiс Поля Класса #2
а где вы его проинициализировали?
SatOleg
0 / 0 / 0
Регистрация: 05.08.2011
Сообщений: 30
05.08.2011, 15:53  [ТС]     Statiс Поля Класса #3
Цитата Сообщение от silentnuke Посмотреть сообщение
а где вы его проинициализировали?
Никак, а что именно требуется проинициализировать?
Вернее не что, а как надо
silentnuke
Android Programmer
138 / 139 / 5
Регистрация: 08.12.2010
Сообщений: 421
05.08.2011, 15:54     Statiс Поля Класса #4
Цитата Сообщение от SatOleg Посмотреть сообщение
Никак, а что именно требуется проинициализировать?
static да.
C++
1
2
3
4
5
6
7
8
9
10
11
class Worker
{
    static const int Part2 = 0x22;
    static const int Part3 = 0x44;
public:
    static int Part1;
    int part1(){return Part1;}
    int part2(){return Part2;}
    int part3(){return Part3;}
};
int Worker::Part1=0;
а дальше уже делайте что хотите.
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,658
05.08.2011, 15:54     Statiс Поля Класса #5
SatOleg,
C++
1
int Worker::Part1 = 0x11;
Сыроежка
Заблокирован
05.08.2011, 16:13     Statiс Поля Класса #6
Цитата Сообщение от SatOleg Посмотреть сообщение
Имея класс
class Worker
{
static const int Part2 = 0x22;
static const int Part3 = 0x44;
public:
static int Part1;
int part1(){return Part1;} // не могу обратиться к полю
int part2(){return Part2;}
int part3(){return Part3;}
};

// Вне класса тоже не могу обратиться

Worker::Part1 = 0x11;

Вполне вероятно, что мое заблуждение очень глупое, спс если сможете помочь.
Дело в том, что вы только объявили переменную Part1, но не определили ее. Необходимо ее определить, чтобы компилятор выделил для нее адрес. Если статические константы можно инициализировать внутри класса, то не константы нужно определять вне класса. Например,

C++
1
int Worker::Part1 = 0x11;
SatOleg
0 / 0 / 0
Регистрация: 05.08.2011
Сообщений: 30
05.08.2011, 16:28  [ТС]     Statiс Поля Класса #7
Всем расставил спс.

Еще 1 вопрос у меня есть два класса

C
1
2
3
4
5
6
7
8
9
10
class Chicken;
class Egg {
public:
    Chicken * creator;
    Chicken getCreator()
    {
        if (!creator) exit(1);
        return *creator;
    }
};
и

C
1
2
3
4
5
6
7
8
9
10
class Egg;
class Chicken {
public:
    Egg * creator;
    Egg getCreator()
    {
        if (!creator) exit(1);
        return *creator;
    }
};
получается, что классы ссылаются друг на друга

Хотелось бы чтобы можно было выполнить функцию

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void chicken_and_egg()
{
    using Zoo::Chicken;
    typedef Zoo::Egg Egg;
    Chicken chicken;
    Egg egg;
    chicken.creator = &egg;
    egg.creator = &chicken;
    Egg e = chicken.getCreator();
    Chicken c = egg.getCreator();
    if( chicken.creator == c.creator 
        && egg.creator == e.creator )
    {
        using namespace std;
        cout << "the `Chicken and Egg' dilemma is solved!" << endl;
    }
}
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
05.08.2011, 16:48     Statiс Поля Класса #8
SatOleg, сделай определение метода Chicken Egg::getCreator();
после определения классов
SatOleg
0 / 0 / 0
Регистрация: 05.08.2011
Сообщений: 30
05.08.2011, 17:20  [ТС]     Statiс Поля Класса #9
Цитата Сообщение от OstapBender Посмотреть сообщение
SatOleg, сделай определение метода Chicken Egg::getCreator();
после определения классов
Полностью решило проблему.

И на счет виртуальных методов:

Имеется родительский класс
C
1
2
3
4
5
6
7
8
9
class Pet
{
public:
    virtual const char * say() = 0;
    virtual bool gnaw() = 0;
protected:
    friend void pets( bool flag = false );
    int lifes(); 
};
потомок
C
1
2
3
4
5
6
7
8
class Cat : Pet
{
public:
    virtual const char * say( void ) { return "miaow" ; }
    virtual bool gnaw( void* ) { return false; }
protected:
    virtual int lifes( void ) { return 9; }
};
и функция где я обращаюсь к наследнику класса

C++
1
2
3
4
5
6
void pets()
{
    Cat cat;
        Pet & myCat = cat;
        printf( "myCat says `%s', gnows %sthing and has %d lifes\n" ,myCat.say() , myCat.gnaw() ? "no" : "every" , myCat.lifes() ); 
}
Хотелось бы узнать где заблуждение . Всем спс
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2011, 22:03     Statiс Поля Класса
Еще ссылки по теме:

Константные поля класса - C++
Такой вопрос, как инициализировать константные поля класса? Работают конструкции вида obj():t(0){}; который используется в примере ниже. А...

Передача поля класса - C++
Всем доброй ночи. Возникла необходимость передачи поля одного класса, в качестве аргумента метода другого класса. Но ввиду недостатка...

Поля структуры внутри класса - C++
Здравствуйте, почему при выполнении метода movingNode поля элемента структуры node (координаты x и y) не меняются? Метод: void...

Сортировка по алфавиту поля класса - C++
Помогите пожалуйста :) У меня есть класс покупатель и нужно дописать функцию которая отсортировала бы по алфавиту по фамилии всех...

Изменение константного поля класса - C++
Является ли изменение константы-поля класса UB? - компилятор может закэшировать значение и не ждать, что оно другое. - с другой стороны...


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

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
05.08.2011, 22:03     Statiс Поля Класса #10
gnaw(void*) в наследнике не совпадает по сигнатуре с базовым...
Уберите нафиг все void в функциях без параметров. Это С++ а не Си
И работать стоит через указатели. + к тому lifes в базовом не виртуальная.
Да и наследование закрытое...
Yandex
Объявления
05.08.2011, 22:03     Statiс Поля Класса
Ответ Создать тему
Опции темы

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