gpt4 book ai didi

C++ 嵌套类 : Instantiate Child Class From Main

转载 作者:行者123 更新时间:2023-11-28 02:43:50 24 4
gpt4 key购买 nike

我想声明一个我的类 outer 的实例,然后用它来声明一个 outer 的子类 inner 的实例。在我正在进行的项目中,我希望能够使用不同的构造函数声明一个内部类的多个实例。这些实例化应该能够访问外部的私有(private)变量。这个例子是我的问题的简化。有人可以告诉我我做错了什么,或者发布一个有效的例子吗?

using namespace std;
#include <iostream>

class outer
{
private:
int x;
public:
outer(int input){x=input;};

class inner
{
public:
int showx(){cout<<outinst->x<<"\n";};
};
};

int main()
{
cout<<"hello julian\n";
outer* clevername(5);

//I can't make it work past this point. The desired efect is
//to declare an instance of outer initiated with a value of x,
//use this instance of outer to declare an instance of inner,
//then use this instance of inner to return the original value of x

clevername->inner* ins;
cout<<ins->showx()<<"\n";
};

最佳答案

嵌套类 (inner) 不会自动成为 outer 的数据成员,outer::inner 类型的对象也不会自动成为 outer::inner 的数据成员访问 outer 类型的任何对象的任何私有(private)成员。此外,要访问对象的成员,您需要 . 运算符。最后,您将对象与指针混淆了。这是对可能符合您预期的代码的尝试(未尝试过,因此可能仍需要调试)。

#include <iostream>

class outer
{
const int x;
public:
outer(int input) : x(input) {}
class inner;
friend class inner; // inner must be friend to access private member x

class inner
{
const outer* const outinst; // const pointer to an outer object
public:
inner(const outer*out) : outinst(out) {}
int showx() const
{ return outinst->x; }
};
};

int main()
{
std::cout<<"hello julian\n";
outer clevername(5); // declare object of type outer
outer::inner ins(&clevername); // declare object of type outer::inner
std::cout << ins.showx() << "\n";
};

请注意,outer::innerouter 的成员类型这一事实没有任何好处或其他用途,即可以实现相同的效果(更容易)通过将 inner 声明为另一个独立类。

关于C++ 嵌套类 : Instantiate Child Class From Main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25067050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com