Статические поля наследованы?

Последовательность и практика. Четыре вещи, которые значительно улучшили мой набор текста:

  1. Найдите удобную клавиатуру, которая очень хорошо подходит вашим рукам. Речь идет не об эргономике или разделенных клавиатурах, а о том, чтобы найти клавиатуру с идеальным пальцем. А это значит использовать клавиатуру в течение пары недель, чтобы увидеть, подходит ли она. Как только вы выберете клавиатуру, используйте ее 100% времени. Иметь ту же клавиатуру дома и на работе.

  2. Убедитесь, что ваша рабочая станция правильно установлена ​​на вас. В основном, следуйте любому приличному руководству по эргономике (90 градусов везде НЕПРАВИЛЬНО !!!). Все эти «эргономичные» вещи приносят пользу стрессу на остальной части вашего тела, который может отвлекать вас или вызывать мышечную усталость (то есть медленное печатание). Опять же, везде используйте одну и ту же конфигурацию рабочей станции - если это означает, что у вас дома должен быть один и тот же дорогой стул, сделайте это.

  3. При отправке по электронной почте, в чате и публикации используйте полные слова и предложения. Аббревиатуры, сленг и другие «ярлыки» научили меня многим плохим привычкам печатания и сделали меня ленивым. У них также было много неуклюжих буквенных комбинаций, которые не появлялись в других местах, включая нормальную композицию и кодирование.

  4. Последовательность. Используйте одни и те же инструменты с одинаковыми настройками и ярлыками все время. Чем меньше времени вы тратите на беспокойство о том, как работает программное обеспечение и на достижение мышки, тем быстрее вы набираете текст.

95
задан BartoszKP 17 August 2015 в 12:45
поделиться

4 ответа

3 во всех случаях, так как static int total , унаследованный от SomeDerivedClass , точно такой же, как в SomeClass , а не отдельная переменная.

Изменить: на самом деле 4 во всех случаях, как заметил @ejames и указал в своем ответе, который см.

Изменить: в коде во втором вопросе отсутствует int в обоих случаях, но добавление его делает все в порядке, например:

class A
{
public:
    static int MaxHP;
};
int A::MaxHP = 23;

class Cat: A
{
public:
    static const int MaxHP = 100;
};

работает нормально и с разными значениями для A :: MaxHP и Cat :: MaxHP - в этом случае подкласс «не наследует» static из базового класса, так как он, так сказать, «прячет» его своим собственным одноименным.

50
ответ дан 24 November 2019 в 05:51
поделиться

Фактически ответ будет четыре во всех случаях, поскольку построение SomeDerivedClass приведет к увеличению суммы вдвое .

Вот полная программа (которую я использовал для проверки своего ответа):

#include <iostream>
#include <string>

using namespace std;

class SomeClass
{
    public:
        SomeClass() {total++;}
        static int total;
        void Print(string n) { cout << n << ".total = " << total << endl; }
};

int SomeClass::total = 0;

class SomeDerivedClass: public SomeClass
{
    public:
        SomeDerivedClass() {total++;}
};

int main(int argc, char ** argv)
{
    SomeClass A;
    SomeClass B;
    SomeDerivedClass C;

    A.Print("A");
    B.Print("B");
    C.Print("C");

    return 0;
}

И результаты:

A.total = 4
B.total = 4
C.total = 4
93
ответ дан 24 November 2019 в 05:51
поделиться

3. Во всех трех случаях

И по вашему другому вопросу, похоже, вам действительно нужна постоянная переменная вместо статической. Может быть более очевидным будет предоставить виртуальную функцию, которая возвращает нужную вам переменную, которая переопределяется в производных классах.

Если этот код не вызывается на критическом пути, где необходима производительность, всегда выбирайте более интуитивно понятный код.

0
ответ дан 24 November 2019 в 05:51
поделиться

Да, производный класс будет содержать одну и ту же статическую переменную, т. Е. Все они будут содержать 3 в сумме (при условии, что сумма где-то инициализирована равной 0).

0
ответ дан 24 November 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: