C++ 如何在不使用分配的情况下访问类中的私有变量?
我试图更好地理解内存分配/指针等 正如您在“test”方法中看到的,我试图访问C++ 如何在不使用分配的情况下访问类中的私有变量?,c++,C++,我试图更好地理解内存分配/指针等 正如您在“test”方法中看到的,我试图访问CTest类的名称,以便将其填充到我的计划数组中。是否有可能在没有分配的情况下访问CTest类(CTest*Test=new CTest();)。我的意思是,是否可以在这里仅使用指针来访问CTest的变量Name 这是我的节目: class CTest { public: void setName(std::string str){ Name = str;} std::string getNam
CTest类的名称
,以便将其填充到我的计划数组中
。是否有可能在没有分配的情况下访问CTest类(CTest*Test=new CTest();)
。我的意思是,是否可以在这里仅使用指针来访问CTest
的变量Name
这是我的节目:
class CTest
{
public:
void setName(std::string str){ Name = str;}
std::string getName(){return Name;}
private:
std::string Name;
};
class CEvent
{
public:
CEvent() = default;
void setTestName(std::string str){Test->setName(str);}
std::string getTestName(){return Test->getName();}
~CEvent(){};
private:
std::string Name;
CTest *Test = new CTest(); //Here
};
class CBlock
{
public:
CBlock() = default;
friend class CBooking;
~CBlock(){}
private:
CEvent *Schedule[7][5];
};
class CBooking
{
public:
CBooking() = default;
void test();
~CBooking(){}
private:
CBlock *Sched;
};
void CBooking::test()
{
Sched = new CBlock();
Sched->Schedule[3][2] = new CEvent();
std::string a = "test2";
Sched->Schedule[3][2]->setTestName(a);
std::cout << Sched->Schedule[3][2]->getTestName();
}
int main()
{
CBooking a;
a.test();
return 0;
}
class-CTest
{
公众:
void setName(std::string str){Name=str;}
std::string getName(){return Name;}
私人:
std::字符串名;
};
C类事件
{
公众:
CEvent()=默认值;
void setTestName(std::string str){Test->setName(str);}
std::string getTestName(){return Test->getName();}
~CEvent(){};
私人:
std::字符串名;
CTest*Test=new CTest();//此处
};
类CBlock
{
公众:
CBlock()=默认值;
朋友类图书;
~CBlock(){}
私人:
CEvent*附表[7][5];
};
课堂预习
{
公众:
CBooking()=默认值;
无效试验();
~CBooking(){}
私人:
CBlock*Sched;
};
void CBooking::test()
{
Sched=新的CBlock();
Sched->Schedule[3][2]=新的CEvent();
std::string a=“test2”;
Sched->Schedule[3][2]->setTestName(a);
std::cout Schedule[3][2]->getTestName();
}
int main()
{
C预订a;
a、 test();
返回0;
}
如果要为CEvent
提供一个现有的CTest
对象,则将其作为引用传递给构造函数:
class CEvent
{
public:
CEvent(CTest &test): test(test) {}
void setTestName(std::string str){test.setName(str);}
std::string getTestName(){return test.getName();}
private:
CTest &test;
};
...
CTest test;
CEvent event(test);
event.setTestName("test");
std::cout << event.getTestName() << "\n";
class-CEvent
{
公众:
CEvent(测试与测试):测试(测试){}
void setTestName(std::string str){test.setName(str);}
std::string getTestName(){return test.getName();}
私人:
测试与测试;
};
...
CTest试验;
CEvent事件(测试);
事件。setTestName(“测试”);
std::cout如果您不想要新建
,请不要使用新建
。只需声明一个CTest
。你能澄清这个问题吗?什么是强制动态分配?我没有看到。对于CTest
,只需将CTest*Test=…
更改为CTest-Test代码>和Test->
到Test。
我从我的真实程序中提取了这个。关于附表->附表[3][2]=新的CEvent();我实际上试图用CEvent的不同变量填充这个数组,在我的程序中,我有5个私有变量,我在数组中填充了它们。问题是我使用了大量内存,我想以某种方式改变想法。我不知道你所说的“没有分配”是什么意思Name
是CTest
的非静态数据成员,这意味着您需要一个CTest
对象来保存名称。这可以通过CTest*test=new CTest()完成代码>或CTest测试代码>,但在这两种情况下,都是为该对象分配内存。除非你的意思是给你的CEvent
对象一个指向现有CTest
对象的指针?@Kevin我就是这个意思。对不起,我解释得不好。我想给CEvent对象(Schedule)一个指向现有CTest对象的指针。这意味着,当我需要将CTest的私有变量分配给CEvent schedule时,我不需要每次都分配内存。感谢您的快速解决方案,但有一个问题:如果CTest是一个抽象类呢?因为如果我将CTest设置为一个抽象类,我会遇到以下错误:error:无法将变量“test”声明为抽象类型“CTest”
CTest测试
^~~~output.cpp:6:7:注意:因为以下虚拟函数在“CTest”中是纯函数:类CTest
output.cpp:10:13:注意:virtual int CTest::print()'virtual print()=0代码>Oops,忽略我之前的评论。我想你说过如果CEvent
是抽象的:)你只需要创建一个从CTest
派生的类的具体对象,并将其传递给CEvent
对象的构造函数即可。e、 g.衍生测试;CEvent事件(测试)代码>。哦,好的,再次感谢