Member 13540005 Ответов: 2

Новое во вложенных классах


всем привет,
Мне трудно использовать вложенные классы. большинство примеров выглядят так
class A
{
    public: 
    private:

   class B{
      public:
      private:
}
}

Однако программа, над которой я работаю, требует от меня реализации вложенного класса, который выглядит следующим образом

class A
{
public: //some functions
private:  class B
         {
           public:  string s;
                    int x;
         }//ends the nested class
string s2;
int x2;
}//ends outer class


Хорошо! Итак, теперь, когда я дал модель того, с чем я работаю
мои вопросы таковы:
1. делаю ли я все еще конструктор для класса B?
как бы это выглядело ....
class A:: class A( ) {                //constructor for A
   class A:: class B:: class B( ) {     //constructor for B

    }


кстати это выглядит запутанно
ОПЕРАЦИОННАЯ.....

class A ::class A(){   }          //class A constructor
   class A:: Class B :: class B (){} // class B constructor outside of A's constructor

2. как я могу использовать переменные для класса B?
всегда ли я должен указывать, где они находятся?
например
type  class A ::class A function(){
                x2= x+ 5;
               return x2;
     }


x2 принадлежит A, но поймет ли компилятор, что x принадлежит B?

Что я уже пробовал:

честно говоря моя первая попытка была напечатана следующим образом
class A :: class A( ){
   class A::class B :: class B(){  }
}

У меня было внутреннее чувство, что это совершенно неправильно. Я еще не отладил, потому что все еще пишу остальные функции для класса А

2 Ответов

Рейтинг:
1

CPallini

Вы имеете в виду что-то похожее на

#include <string>
#include <iostream>
using namespace std;

class A
{
public: //some functions
  A(int x, string s, int x2, string s2);

private:
  class B
  {
  public:
    B(int x, string s);
    string s;
    int x;
  };//ends the nested class

  B b;
  string s2;
  int x2;

public:
  string getbs();


};//ends outer class


A::A(int x, string s, int x2, string s2):b(x,s),s2(s2),x2(x2)
{
}

A::B::B(int x, string s):s(s), x(x)
{
}

string A::getbs(){return b.s;}

int main()
{
  A a(1,"hi",2,"hello");

  cout << a.getbs() << endl;
}
?

Обратите внимание, что в связи с правилами доступа (B находится ли рядовой в A) вы не можете получить доступ A::B в main функция.


Laxmidhar tatwa technologies

Хороший полезный код

Рейтинг:
0

Member 13540005

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

Richard MacCutchan

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