在 class 中访问结构和联合成员函数

Accessing struct and union member functions within a class

在这个程序中,我只想测试 class 本身的结构和联合。

我创建了一个 public struct,并在其中声明了一个联合。

我正在使用 Visual Studio 和 Qt Creator 来输入这段代码。

我想问一下,在class中定义一个struct好不好用? 我对此有疑问。

如果这是正确的,我如何从 main 访问 struct 的方法或数据成员?

我还想使用 structunion 成员。

如果 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;
}