繁体   English   中英

访问类中的结构和联合成员函数

[英]Accessing struct and union member functions within a class

在此程序中,我只想测试类本身中的结构和联合。

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

我正在使用Visual Studio和Qt Creator键入此代码。

我想问一下,在一个类中定义一个struct好并且易于访问吗? 我对此有疑问。

如果这是正确的,我怎么能访问的方法或数据成员structmain

我还想使用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;
}

您实际上想做的是在您的类中拥有一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM