小编Lei*_*zar的帖子

覆盖非虚方法

让我们假设Visual C++ 2010中的这种情况:

#include <iostream>
#include <conio.h>

using namespace std;

class Base
{
public:
    int b;
    void Display()
    {
        cout<<"Base: Non-virtual display."<<endl;
    };
    virtual void vDisplay()
    {
        cout<<"Base: Virtual display."<<endl;
    };
};

class Derived : public Base
{
public:
    int d;
    void Display()
    {
        cout<<"Derived: Non-virtual display."<<endl;
    };
    virtual void vDisplay()
    {
        cout<<"Derived: Virtual display."<<endl;
    };
};

int main()
{
    Base ba;
    Derived de;

    ba.Display();
    ba.vDisplay();
    de.Display();
    de.vDisplay();

    _getch();
    return 0;
};
Run Code Online (Sandbox Code Playgroud)

从理论上讲,这个小应用程序的输出应该是:

  • 基础:非虚拟显示.
  • 基地:虚拟展示.
  • 基础:非虚拟显示.
  • 衍生:虚拟显示.

因为Base类的Display方法不是虚方法,所以Derived类不能覆盖它.对?

问题是,当我运行应用程序时,它会打印出:

  • 基础:非虚拟显示. …

c++ overriding

64
推荐指数
3
解决办法
5万
查看次数

XPath - 选择两个节点之间的第一组兄弟节点

我在使用XPath查询C#中的一些HTML文件时遇到了一个小问题.

好的,首先是HTML示例:

<table id="theTable">
    <tbody>
        <tr class="theClass">A</tr>
        <tr class="theClass">B</tr>
        <tr>1</tr>
        <tr>2</tr>
        <tr>3</tr>
        <tr>4</tr>
        <tr>5</tr>
        <tr class="theClass">C</tr>
        <tr class="theClass">D</tr>
        <tr>6</tr>
        <tr>7</tr>
        <tr>8</tr>
        <tr>9</tr>
        <tr>10</tr>
        <tr>11</tr>
        <tr>12</tr>
        <tr>13</tr>
        <tr>14</tr>
        <tr>15</tr>
        <tr class="theClass">E</tr>
        <tr class="theClass">F</tr>
        <tr>16</tr>
        <tr>17</tr>
        <tr>18</tr>
        <tr>19</tr>
        <tr>20</tr>
        <tr>21</tr>
        <tr>22</tr>
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

现在,我要做的是只获取B和C节点之间的元素(1,2,3,4,5).

这是我到目前为止所尝试的:

using System;
using System.Xml.XPath;

namespace Test
{
    class Test
    {
        static void Main(string[] args)
        {
            XPathDocument doc = new XPathDocument("Test.xml");
            XPathNavigator nav = doc.CreateNavigator();

            Console.WriteLine(nav.Select("//table[@id='theTable']/tbody/tr[preceding-sibling::tr[@class='theClass'] and following-sibling::tr[@class='theClass']]").Count);
            Console.WriteLine(nav.Select("//table[@id='theTable']/tbody/tr[preceding-sibling::tr[@class='theClass'][2] and following-sibling::tr[@class='theClass'][4]]").Count);

            Console.ReadKey(true);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码运行在上面的HTML上,输出19和5.所以只有第二个XPath表达式可以工作,但这只是因为它搜索的元素class=theClass在它们之前有两个元素,在它们之后有4个元素. …

c# xml xpath siblings

2
推荐指数
1
解决办法
3137
查看次数

标签 统计

c# ×1

c++ ×1

overriding ×1

siblings ×1

xml ×1

xpath ×1