结构体引用¶
测试的源码¶
测试的源码中考虑到了普通结构体、结构体指针、结构体引用作为参数,以及作为返回值,并且考虑了结构体中含有结构体成员的情况,构造函数中对类的结构体的引用类型的成员变量的赋值。
#include"json/json.h"
#include <iostream>
using namespace std;
#pragma once
class StructQuote
{
public:
StructQuote()
{
};
~StructQuote() {};
struct TestCase
{
int had;
};
struct QuoteTestCase
{
int one;
char two;
TestCase CaseQuote;
};
public:
QuoteTestCase *CheckFunc;
QuoteTestCase CheckFuncR;
QuoteTestCase &CheckFuncRRR=CheckFuncR;
void CheckNameTest(QuoteTestCase *CheckFunc);
void CheckFunctionName(QuoteTestCase CheckFunc);
void CheckFunctionTest(QuoteTestCase &CheckFunc);
StructQuote::QuoteTestCase *CheckPointer(QuoteTestCase *CheckFunc);
StructQuote::QuoteTestCase Checkbuiltn(QuoteTestCase CheckFunc);
StructQuote::QuoteTestCase &CheckNameXX(QuoteTestCase CheckFunc);
public:
StructQuote(QuoteTestCase *CheckFunc, QuoteTestCase CheckFuncR, QuoteTestCase &CheckFuncRRR , bool Wings):CheckFunc(CheckFunc), CheckFuncR(CheckFuncR), CheckFuncRRR(CheckFuncRRR)
{}
};
结构体引用的值生成¶
结构体引用的值生成和结构体普通类型是一致的,直接对结构体内部的成员进行一个个赋值。
{
"QuoteTestCase0" : {
"CaseQuote" : {
"had" : 8039
},
"one" : 143,
"two" : "s"
},
"StructQuote0" : {
"CheckFunc" : [
{
"CaseQuote" : {
"had" : 6547
},
"one" : 2732,
"two" : "v"
}
],
"CheckFuncR" : {
"CaseQuote" : {
"had" : 5702
},
"one" : 2401,
"two" : "Q"
},
"CheckFuncRRR" : {
"CaseQuote" : {
"had" : 1486
},
"one" : 7740,
"two" : "u"
}
},
"TestCase0" : {
"had" : 1764
}
}
结构体引用作为参数¶
结构体引用直接调用普通结构体的赋值函数。
问题: 为什么直接调用普通结构体的赋值函数?
答: 因为结构体引用部分的逻辑和普通结构体是一模一样的,值生成部分也是一样,所以选择在参数赋值时直接调用普通结构体类型的,这样可以不用再写一遍引用部分的驱动。
int DriverStructQuote::DriverStructQuoteCheckFunctionTest2(int times)
{
CheckFunctionTest2Times = times;
/* Root is the json object of the value file.CheckFunctionTest2_Root is function.CheckFunctionTest2 is json object. */
const char* jsonFilePath = "drivervalue/StructQuote/CheckFunctionTest2.json";
Json::Value Root;
Json::Reader _reader;
std::ifstream _ifs(jsonFilePath);
_reader.parse(_ifs, Root);
Json::Value _CheckFunctionTest2_Root = Root["CheckFunctionTest2" + std::to_string(times)];
/*It is the 1 parameter: CheckFunc CheckFunctionTest2
*
* Parameters of the prototype:StructQuote::QuoteTestCase &CheckFunc
*/
/* CheckFunc */
Json::Value _CheckFunc_Root = _CheckFunctionTest2_Root["CheckFunc"];
struct StructQuote::QuoteTestCase _CheckFunc = DriverstructQuoteTestCase(_CheckFunc_Root);
//The Function of Class Call
_StructQuote->CheckFunctionTest(_CheckFunc);
return 0;
}
结构体引用作为函数返回值¶
结构体引用作为函数返回值同参数赋值一样,可以张家界调用普通结构体类型的Return函数进行赋值。
void DriverStructQuote::ReturnDriver_CheckNameXX3(StructQuote::QuoteTestCase& returnType)
{
const char* JsonFilePath = "drivervalue/StructQuote/CheckNameXX3.json";
Json::Value Root;
Json::Reader _reader;
std::ifstream _ifs(JsonFilePath);
_reader.parse(_ifs, Root);
Json::Value CheckNameXX3_Root = Root["CheckNameXX3" + std::to_string(CheckNameXX3Times)];
/* returnType */
Json::Value returnType_Root;
returnType_Root = Returnstruct_QuoteTestCase(returnType_Root, returnType);
CheckNameXX3_Root["returnType"] = returnType_Root;
Root["CheckNameXX3" + std::to_string(CheckNameXX3Times)] = CheckNameXX3_Root;
std::ofstream JsonFile;
Json::StyledWriter sw;
JsonFile.open(JsonFilePath);
JsonFile << sw.write(Root);
JsonFile.close();
}
构造函数中对结构体引用类型的成员变量的赋值¶
构造函数中赋值部分调用的也是参数赋值部分的内容,所以在结构体引用部分调用的还是普通结构体的父子函数。
DriverStructQuote::DriverStructQuote(Json::Value Root, int times)
{
Json::Value _StructQuote_Root = Root["StructQuote" + std::to_string(times)];
/* CheckFunc */
Json::Value _CheckFunc_Root = _StructQuote_Root["CheckFunc"];
int _CheckFunc_len = _CheckFunc_Root.size();
StructQuote::QuoteTestCase* _CheckFunc = DriverstructQuoteTestCasePoint(_CheckFunc_Root, _CheckFunc_len);
/* CheckFuncR */
Json::Value _CheckFuncR_Root = _StructQuote_Root["CheckFuncR"];
struct StructQuote::QuoteTestCase _CheckFuncR = DriverstructQuoteTestCase(_CheckFuncR_Root);
/* CheckFuncRRR */
Json::Value _CheckFuncRRR_Root = _StructQuote_Root["CheckFuncRRR"];
struct StructQuote::QuoteTestCase _CheckFuncRRR = DriverstructQuoteTestCase(_CheckFuncRRR_Root);
_StructQuote = new StructQuote(_CheckFunc, _CheckFuncR, _CheckFuncRRR, false);
}