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++比较陌生,我已经看了很多答案,但我从来没有得到满意的答案.
假设我有一个名为的结构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++中,嵌套类与单独/独立类没有任何不同.
当我试图更好地理解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) 我对这个话题非常困惑,基本上我有这个代码:
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提供对外类成员的访问.
谢谢.
标题已经说了很多,
但基本上我想做的是以下(示例):
我有一个名为A的类,另一个名为B的类,如下所示:
class A
{
int a;
class B
{
void test()
{
a = 20;
}
};
};
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我的目标是让B类可以访问A类,因为它是一个嵌套类.不是这个不会工作,因为B无法访问A,但它如何才能访问?
谢谢
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帖子,其中一个答案将内部课程与朋友课程进行比较,但朋友的朋友不是朋友,所以想知道标准是什么.
所以我浏览了一些代码,我遇到了:
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)
有人可以解释如何使用/访问私有变量"消息",即使它是私有的?
我有一个父类,子类,在这个子类中我定义了一些结构.在这个结构中,我想调用父方法.可能吗?
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++中是可能的吗?那怎么实现呢?