相关疑难解决方法(0)

为什么派生类可以访问基类的私有字段?

class Base {
 public:
  class FirstBase {
    friend class Base;
    int x = 10;
  };

  class SecondBase : public FirstBase {
   public:
    SecondBase() : FirstBase() {}
    void t() { std::cout << FirstBase::x; }
  };
};
Run Code Online (Sandbox Code Playgroud)

这段代码可以编译并工作,但我不明白为什么它可以工作。可以解释或引用来源来阅读吗?

我使用 gcc 版本 11.4.0 std=C++17

c++ inheritance friend c++17

23
推荐指数
2
解决办法
2481
查看次数

内部类访问外部类

我对C++比较陌生,我已经看了很多答案,但我从来没有得到满意的答案.

假设我有一个名为的结构FSM.最终在我的代码中,FSM可以创建多个实例.其中一个FSM属性int X不是静态的,每个实例都FSM应该有自己的值X.

现在,其中一个FSM属性是另一个submachine需要读取这样的值的结构X:

struct FSM
{
  public:
    int x;

    int getX(){return x;}

    struct submachine
    {
        void onentry() {int g = getX();};
    };
};
Run Code Online (Sandbox Code Playgroud)

这会出现以下错误:

错误:'FSM :: getX':非静态成员函数的非法调用

我的问题是,submachine是一个成员FSM,所以它不应该有权访问所有属性的本地实例FSM吗?如果没有,当我们创建一个实例时FSM,我们不会创建其所有成员的实例,即submachine?如果是这样,那么为什么我们需要创建一个需要的对象onentry()呢?

我假设编译器是正确的,所以我也想知道是否有办法使这项工作.

注意:不幸的是,内部结构(submachine)的实例在调用事件时被实例化,因此我只能定义类型,而不是为它们实例化对象FSM.

c++ structure

19
推荐指数
1
解决办法
3万
查看次数

C++嵌套类 - 内/外关系

我在社区和外面阅读了一些关于嵌套类的帖子,我很困惑.

据我所知,在C++中,嵌套类与单独/独立类没有任何不同.

当我试图更好地理解conecpt时,我编写了一个简单的代码,我发现内部类可以访问外部类而不需要从外部类中获得友谊.

例如:

class Outer {
private : // default access modifier
    int x;
    static int sx;
public:
    class Inner {
    public:
        void changeOuterDataMemberValues(int value) {
            sx = value; // changes the private static data member of Outer.

            Outer out;
            out.x = value; // changes the private data member via object (not via class!)
        }
        void printMyOuterDataMember()  {
            cout << sx; // prints the private data member of Outer.
        }
    };
};


class Lonesome { …
Run Code Online (Sandbox Code Playgroud)

c++

8
推荐指数
1
解决办法
5289
查看次数

内部类访问外部类成员

我对这个话题非常困惑,基本上我有这个代码:

template <typename T>
class SListArray
{
public:
    class const_iterator
    {
    public:
        const_iterator(size_t i_currentNode = -1)
            :m_position(i_currentNode)
        {
        }

        T const& operator*() const
        {
            return m_data[m_position].element;
        }

        // ...

    protected:
        size_t m_position;
    };

    explicit SListArray();

    // ...

private:
    std::vector<Node<T>> m_data;

    // ...
};
Run Code Online (Sandbox Code Playgroud)

这段代码给了我一个编译错误,所以,我想知道是否可以给Inner Class提供对外类成员的访问.

谢谢.

c++

6
推荐指数
2
解决办法
7064
查看次数

C++嵌套类,访问父类变量

标题已经说了很多,

但基本上我想做的是以下(示例):

我有一个名为A的类,另一个名为B的类,如下所示:

class A
{
   int a;

   class B
   {
      void test()
      {
         a = 20;
      }
   };
};
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我的目标是让B类可以访问A类,因为它是一个嵌套类.不是这个不会工作,因为B无法访问A,但它如何才能访问?

谢谢

c++ nested class parent

5
推荐指数
1
解决办法
8213
查看次数

内部类访问外部几个级别

VS 2010中的以下版本:

class C1
{
private:
    enum E {E_VAL};
    static void methC1() {}

public:
    class C2
    {
    public:
        class C3
        {
        public:
            void methC3() 
            {
                int a=E_VAL; // this surprised me
                methC1();    // and this too
            }
        };
    };
};

int main() 
{
    C1::C2::C3 obj;
    obj.methC3();
}
Run Code Online (Sandbox Code Playgroud)

这是标准吗?我看到了另一个SO帖子,其中一个答案将内部课程与朋友课程进行比较,但朋友的朋友不是朋友,所以想知道标准是什么.

c++ inner-classes

5
推荐指数
1
解决办法
77
查看次数

访问子类中的私有变量?

所以我浏览了一些代码,我遇到了:

public class Person
{
    private string message;

    public override string ToString()
    {
        return message;
    }

    public static Person CreateEmployee()
    {
        return new Employee();
    }

    class Employee : Person
    {
        public Employee()
        {
            this.message = "I inherit private members!";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释如何使用/访问私有变量"消息",即使它是私有的?

c# oop nested-class private-members

2
推荐指数
2
解决办法
7947
查看次数

是否可以从C++中在此类中定义的struct内部调用类方法?

我有一个父类,子类,在这个子类中我定义了一些结构.在这个结构中,我想调用父方法.可能吗?

class Parent
{
public:
    int foo(int x);
}

class Child : public Parent
{
public:
    struct ChildStruct {
        int x;

        int bar(int y) {
            return GET_CLASS_CHILD->foo(this->x + y);
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

这样的事情在C++中是可能的吗?那怎么实现呢?

c++ struct class

1
推荐指数
1
解决办法
434
查看次数