多平台统一管理软件接口,如何实现多平台统一管理软件接口
279
2023-01-10
本文目录一览:
C++是用虚函数实现接口重用的。
在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表) {函数体};实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。
在C++中,继承是一个对象自动获取其父对象的所有属性和行为的过程。通过继承,您可以重用,扩展或修改在其他类中定义的属性和行为。通过继承,可以实现函数重写以及多态。
在C++中,继承另一个类的成员的类称为派生类,其成员被继承的类称为基类。 派生类是基类的子类。
扩展资料
当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型。继承类型是通过上面讲解的访问修饰符 access-specifier 来指定的。
几乎不使用 protected 或 private 继承,通常使用 public 继承。当使用不同类型的继承时,遵循以下几个规则:
公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
/***************
<?xml version="1.0" encoding="utf-8"?
<Cases
<case
<No001</No
<CopyFile src="C:\test.txt" dest="D:\test.txt"</CopyFile
</case
<case
<No002</No
<DelFileC:\test.txt</DelFile
</case
</Cases
*******************/
// 我们用MFC来读取上述xml,代码如下自动实现接口函数 c:
void ReadXml(CString strXmlPath)
{
MSXML2::IXMLDOMDocumentPtr pDoc;
::CoInitialize(NULL);
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
if (!SUCCEEDED(hr))
{
MessageBox(_T("创建DOMDocument对象失败。\n请检查运行环境"), _T("错误"), MB_ICONERROR);
return;
}
// 读取xml
pDoc-put_async(VARIANT_FALSE);
VARIANT_BOOL bhr = pDoc-load((_variant_t)strXmlPath);
if (bhr != VARIANT_TRUE) {
MessageBox(_T("无法正确读取xml文件"), _T("错误"), MB_ICONERROR);
return;
}
// 根节点取得
MSXML2::IXMLDOMElementPtr root = pDoc-documentElement;
// 取得根节点自动实现接口函数 c的名字
_variant_t strRootName = root-nodeName;
_bstr_t wstrRootName(strRootName.bstrVal);
MSXML2::IXMLDOMNodeListPtr nodeList = root-GetchildNodes();//cases
// 解析cases的子节点
ReadCases(nodeList);
}
void ReadCases(MSXML2::IXMLDOMNodeListPtr nodeList)
{
int ilength = nodeList-Getlength();
for (int nodeCount = 0; nodeCount < ilength; nodeCount++) {
MSXML2::IXMLDOMNodePtr nodePtr = nodeList-nextNode();
_variant_t strNodeName = nodePtr-GetnodeName();
_variant_t strNodeValue = nodePtr-GetnodeValue();
// 读取case节点下的子节点
ReadCase(nodePtr-GetchildNodes());
}
}
void ReadCase(MSXML2::IXMLDOMNodeListPtr nodeList)
{
CString strLogInfo;
strLogInfo.Empty();
CString strNo; // case编号
CString strSrcFile; // 源文件
CString strDestFile; // 目标文件
for (int nodeCount = 0; nodeCount < nodeList-Getlength(); nodeCount++)
{
MSXML2::IXMLDOMNodePtr nodePtr = nodeList-nextNode();
_variant_t strCaseNodeName = nodePtr-GetnodeName();
_variant_t strCaseNodeValue = nodePtr-Gettext();
BSTR bStrTemp = strCaseNodeName.bstrVal;
CString strTemp = CString(bStrTemp);
SysFreeString(bStrTemp);
CString strNodeName = strTemp;
// 节点的值,如何取得?
if (0 == strNodeName.CompareNoCase(_T("NO")))
{
strNo = (BSTR)strCaseNodeValue.pbstrVal;
// 取得的值可以打印出来
printf(strNo);
}
// 节点有属性值,该怎么处理?
else if (0 == strNodeName.CompareNoCase(_T("CopyFile")))
{
strSrcFile.Empty();
strDestFile.Empty();
// 取得节点的属性值
MSXML2::IXMLDOMNamedNodeMapPtr pDOMAttrList= nodePtr-Getattributes();
for (int j = 0; j < pDOMAttrList-Getlength(); j++)
{
MSXML2::IXMLDOMNodePtr pDOMAttr= pDOMAttrList-Getitem(j);
// 取得源文件路径
if (CompareNoCase((char*)pDOMAttr-GetnodeName(), _T("src")))
{
strSrcFile = pDOMAttr-GetnodeTypedValue();
// 取得目标文件路径
} else if (CompareNoCase((char*)pDOMAttr-GetnodeName(), _T("dest")))
{
strDestFile =pDOMAttr-GetnodeTypedValue();
}
CopyFile(strSrcFile, strDestFile, FALSE);
}
else if (0 == strNodeName.CompareNoCase(_T("DelFile")))
{
strDestFile.Empty();
strDestFile = CString((BSTR)strCaseNodeValue.pbstrVal);
DeleteFile(strDestFile);
}
}
}
// 为了能够让MFC认识MSXML2,我们需要引入相应的dll,代码如下;
#import "msxml4.dll"
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~