在 class 中访问结构和联合成员函数
Accessing struct and union member functions within a class
在这个程序中,我只想测试 class 本身的结构和联合。
我创建了一个 public struct
,并在其中声明了一个联合。
我正在使用 Visual Studio 和 Qt Creator 来输入这段代码。
我想问一下,在class中定义一个struct
好不好用?
我对此有疑问。
如果这是正确的,我如何从 main
访问 struct
的方法或数据成员?
我还想使用 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;
}
您实际上想要做的是在您的 class 中有一个结构的 实例 。你所做的是在你的 class 中定义一个 class (它实际上并没有给你的 class 一个该类型的成员,而只是限定了它的定义)。
所以你需要做的是从 class:
中拉出我们的 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;
}
在这个程序中,我只想测试 class 本身的结构和联合。
我创建了一个 public struct
,并在其中声明了一个联合。
我正在使用 Visual Studio 和 Qt Creator 来输入这段代码。
我想问一下,在class中定义一个struct
好不好用?
我对此有疑问。
如果这是正确的,我如何从 main
访问 struct
的方法或数据成员?
我还想使用 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;
}
您实际上想要做的是在您的 class 中有一个结构的 实例 。你所做的是在你的 class 中定义一个 class (它实际上并没有给你的 class 一个该类型的成员,而只是限定了它的定义)。
所以你需要做的是从 class:
中拉出我们的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;
}