[英]Accessing struct and union member functions within a class
在此程序中,我只想测试类本身中的结构和联合。
我创建了一个公共struct
,并在其中声明了一个联合体。
我正在使用Visual Studio和Qt Creator键入此代码。
我想问一下,在一个类中定义一个struct
好并且易于访问吗? 我对此有疑问。
如果这是正确的,我怎么能访问的方法或数据成员struct
从main
?
我还想使用struct
的union
成员。
如果无法通过这种方式访问struct
的方法或函数, 还有另一种方法吗?
// **************************************************** ****************************************
#ifndef CTEST_H
#define CTEST_H
class CTest {
int value;
public:
CTest(int);
int getValue();
struct CTESTSTRUCT {
union CTESTUNION
{
enum CTestEnum {
var1 = 1
};
char varChar1 = 'Y';
char varChar2 /*= 'N'*/; //union atmost have one field initializer
};
int structValue();
int testVal;
};
~CTest();
};
#endif
//************************************************************************************
#include <iostream>
#include "CTest.h"
CTest::CTest(int argVal) : value(argVal) {
std::cout << "Constructor Called" << std::endl;
}
int CTest::getValue() {
std::cout << "getValue Called" << std::endl;
return value;
}
int CTest::CTESTSTRUCT::structValue() {
std::cout << "CTESTSTRUCT::setValue Called" << std::endl;
return CTESTSTRUCT::CTESTUNION::var1;
}
CTest::~CTest() {
std::cout << "Distructor Called" << std::endl;
}
//*********************************************************************************
#include <iostream>
#include "CTest.h"
using namespace std;
CTest * ctestObj;
int main() {
ctestObj = new CTest(25);
int returnVal = ctestObj->getValue();
std::cout << "Value Returned: " << returnVal << std::endl;
std::cout << "structVal: " << std::endl;
//CTest::CTESTSTRUCT::testVal = 10;
delete ctestObj;
return 0;
}
您实际上想做的是在您的类中拥有一个struct 实例 。 您要做的是在您的类中定义一个类(实际上并没有给您的类该类型的成员,而只是限定了其定义的范围)。
因此,您需要做的是从类中提取struct
:
struct CTESTSTRUCT
{
// ...
};
然后给CTest
一个CTESTSTRUCT
类型的成员
class CTest {
int value;
public:
CTest(int);
int getValue();
CTESTSTRUCT test;
~CTest();
};
现在,您可以像这样访问它:
int main() {
CTest * ctestObj;
ctestObj = new CTest(25);
int returnVal = ctestObj->getValue();
std::cout << "Value Returned: " << returnVal << std::endl;
std::cout << "structVal: " << std::endl;
ctestObj->test.testVal = 10;
delete ctestObj;
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.