C ++继承 - 覆盖函数,包括使用“::”s,.h文件& .cpp文件

时间:2017-04-08 17:04:18

标签: c++ inheritance virtual header-files

我已经查看了所有内容,但我找不到涉及::运营商的任何资源。

我有两个课程:AB。我还有另一个班级C

B继承自AC也是如此。

A包含一个名为d的方法:

A的{​​{1}}档案:

.h

class A { public: ... void d(); }; 的{​​{1}}档案:

A

如果我有.cpp... void A::d() { ... } ,并且我运行了B,那么如果Cd没有B,则应该运行此方法他们自己被覆盖C

我想覆盖d中的d,但我不清楚我是如何做到这一点的。我应该在B的{​​{1}}文件中执行此操作吗?:

B

.cpp

并在void A::d() { ... } 的{​​{1}}文件中声明它?

或者函数应该是void B::d() { ... } 吗?

1 个答案:

答案 0 :(得分:4)

覆盖是虚拟成员函数的属性,它是类定义的一部分。

示意图,您想:

    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "/FileUpload")]
    void FileUpload(Patron patron);

    public void FileUpload(Object patron)
    {

            byte[] newBytes = null;
            BinaryWriter Writer = null;
            string Name = @"C:\\Temp\\" + object.Param1String + "";
            //byte[] bData = Helper.CopyToArray(object.ByteArray);

            try
            {
                newBytes = Convert.FromBase64String(patron.ByteArray);
                Writer = new BinaryWriter(File.OpenWrite(Name));                    
                Writer.Write(newBytes);
                Writer.Flush();
                Writer.Close();
            }
            catch
            {                    
                //return false;
            }
        }

用法:假设你有这个功能:

struct A
{
    virtual void d() { /* A's implementation */ }
};

struct B : A
{
    void d() override { /* B's override of A::d */ }
};

struct C : A
{
}:

然后:

void g(A & a) { a.d(); }

(如何将代码拆分为不同的文件与继承和覆盖无关。)