в чем смысл подкласса :: суперкласс в c

#c

#c

Вопрос:

Рассмотрим следующий код

 class abc
{
};

class def: public abc 
{
};

void main()
{
    abc a1;
    def a2;
    def::abc a3;
}
  

Что def::abc здесь подразумевается под; является abc членом def ?
Являются a3 и a1 похожими?

Комментарии:

1. def::abc то же самое, что abc . Это избыточно. Смотрите также: введенное имя класса

2. Прочитайте хорошую книгу по программированию на C , затем посмотрите какой-нибудь справочный веб-сайт на C и, возможно, этот проект стандарта C 11

3. Спасибо. Понял. Просто хотел подтвердить это. 👍

4. если вы предпочитаете экспериментировать с rtfm, вы могли бы проверить std::is_same_v<abc,def::abc> , чтобы убедиться, что они одинаковы

Ответ №1:

def::abc a3; такой же, как abc a1;. Вы можете проверить порядок создания экземпляра, как показано ниже :

 #include <iostream>

class Base {
   public:
      Base()
      {   
         std::cout << "Basen";
      }
};

class Derived: public Base
{
   public:
      Derived()
      {   
          std::cout << "Derivedn";
      }
  };

  int main()
  {
      std::cout << "Instantiating Basen";
      Base cBase;

      std::cout << "Instantiating Derivedn";
      Derived cDerived;

      std::cout << "Instantiating Derived::Basen";
      Derived::Base cBDerived;

     return 0;
  }
  

Вывод является :

 Instantiating Base
Base
Instantiating Derived
Base
Derived
Instantiating Derived::Base
Base
  

Комментарии:

1. Рад, что это помогло! Вы также можете отметить ответ полезным 🙂