小编nit*_*ian的帖子

240
推荐指数
14
解决办法
22万
查看次数

覆盖具有不同返回类型的成员函数

考虑以下示例:

#include <iostream>

using namespace std;

class base
{
   public:
      virtual int func()
      {
         cout << "vfunc in base class\n";
         return 0;
      }
};

class derived: public base
{
   public:
      double func()
      {
         cout << "vfunc in derived class\n";
         return 0;
      }
};

int main()
{
   base *bptr = new derived;
   bptr->func();

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

编译器为上面的代码提供了一个错误,即覆盖函数存在冲突类型.为什么不能使用不同的返回类型覆盖派生类中的函数?

我相信,为了覆盖一个函数,需要在派生类中重新定义基类虚方法.要重新定义方法,方法的签名必须相同.由于返回类型不是签名的一部分,我相信即使返回类型有差异,该方法仍将被重新定义?在上述代码的情况下,func在派生类中使用不同的返回类型重新定义虚函数.但是编译器会抛出错误.我的理解是否正确?

c++ overriding virtual-functions redefinition

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

差异交换和分页

之间有什么区别SwappingPaging参考Process Memory Management

如果有任何我可以获得更多信息的地方,也请指导我的教程.

paging swap memory-management process

19
推荐指数
3
解决办法
4万
查看次数

用于了解文件系统是否已安装的Shell脚本

我有一个安装在特定目录上的tmpfs文件系统.我想编写一个shell脚本来检查tmpfs文件系统是否已经挂载在目录中.

filesystems shell mount

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

来自构造函数和析构函数的纯虚拟调用

C++标准规定禁止从构造函数或析构函数中调用纯虚函数.这是什么原因?标准为什么要设置这样的限制?

c++ constructor destructor pure-virtual

17
推荐指数
2
解决办法
4690
查看次数

解释为什么构造函数不能基于研究虚拟化:纠正错误(如果有的话)

我做了一些研究,找出为什么构造函数不能虚拟.我在这里巩固了我的理解.

我将首先解释什么是虚函数,然后根据第一个解释解释为什么构造函数不能是虚函数.

什么是virtual function

虚函数是基类中的函数或方法,可以通过具有相同签名的函数在派生类中重新定义或覆盖.换句话说,虚函数允许在派生类中具有基类方法的自定义实现.它需要使用virtual关键字声明.在虚函数调用时,决定在运行时选择函数定义的哪个版本(在基类或派生类中),具体取决于调用对象的类型(动态绑定).

当函数声明为virtual时,它告诉编译器应该仅在运行时确定调用虚函数的对象的类型.然后根据对象的类型,函数调用应该绑定到函数定义,并且应该调用适当的函数.

为什么一个constructor不能虚拟?

当函数声明为virtual时,它告诉编译器应该仅在运行时确定调用该函数的对象的类型,然后根据对象的类型调用该函数的相应版本.

如果要将构造函数声明为virtual,它将告诉编译器应该在运行时确定将调用构造函数的对象类型.但是对于构造对象,应该在编译时而不是在运行时知道对象的确切类型.这就是构造函数不能虚拟的原因.

我希望SO成员纠正两个答案中的错误,如果有的话.我认为这对我和其他人有帮助,如果你可以通过重写它作为你的答案来纠正答案,而不是仅仅指出错误.

c++ constructor virtual-functions dynamic-binding

16
推荐指数
0
解决办法
2万
查看次数

声明私有时的静态成员变量

当静态成员变量在类中声明为private时,如何定义它?

假设我有以下类声明

class static_demo
{
   private:
      static int a;

   public:
      static int b;

      void set(int x, int y)
      {
         a = x;
         b = y;
      }

      void show()
      {
         cout << "a = " << a << "\n";
         cout << "b = " << b << "\n";
      }
};
Run Code Online (Sandbox Code Playgroud)

然后,要定义的以下语句a将导致编译错误.

int static_demo::a;
Run Code Online (Sandbox Code Playgroud)

那么有可能在类的私有部分中有一个静态数据成员吗?

根据Greg添加完整代码,

#include <iostream>

using namespace std;

class static_demo
{
   private:
      static int a;

   public:
      static int b;

      void set(int x, int y)
      {
         a …
Run Code Online (Sandbox Code Playgroud)

c++ static-members

15
推荐指数
1
解决办法
4万
查看次数

运算符在C++中重载为int + obj

我有以下课程: -

class myclass
{
    size_t st;

    myclass(size_t pst)
    {
        st=pst;
    }

    operator int()
    {
        return (int)st;
    }

    int operator+(int intojb)
    {
        return int(st) + intobj; 
    }

};
Run Code Online (Sandbox Code Playgroud)

只要我像这样使用它,这个工作正常: -

char* src="This is test string";
int i= myclass(strlen(src)) + 100;
Run Code Online (Sandbox Code Playgroud)

但我无法做到这一点: -

int i= 100+ myclass(strlen(src));
Run Code Online (Sandbox Code Playgroud)

任何想法,我怎么能实现这个?

c++ operator-overloading operators operator-keyword

13
推荐指数
3
解决办法
2万
查看次数

检查符号链接

我的主目录中有一个符号链接ac到同一目录中的另一个文件.

ac - > bc

我知道如何使用shell脚本检查ac是一个符号链接

if [ -L /home/nit/a.c ] ; then
    echo "a.c is a symbolic link"
fi
Run Code Online (Sandbox Code Playgroud)

但我的问题是如何编写一个shell脚本来检查ac是否是一个专门针对bc的符号链接?

谢谢

unix shell symlink

13
推荐指数
2
解决办法
2万
查看次数

类中的纯虚析构函数定义会产生编译错误

pure virtual destructor基类应该有一个定义.否则编译器将在链接时生成从派生类析构函数调用基类析构函数,并将导致链接错误.

我试图在基类中定义纯虚拟析构函数,如下所示:

class base
{
   public:
      base()
      {
         cout << "constructor in base class\n";
      }

      virtual ~base()=0
      {}
};
Run Code Online (Sandbox Code Playgroud)

这给出了编译错误:

错误:函数定义的纯指定符

然后我尝试在基类之外定义函数,如下所示:

class base
{
   public:
      base()
      {
         cout << "constructor in base class\n";
      }

      virtual ~base()=0;
};

base::~base()
{

}
Run Code Online (Sandbox Code Playgroud)

这将删除编译错误,它的行为与我的理解相同.

但我的问题是如何在基类之外定义纯虚拟析构函数来消除编译错误?

c++ inheritance destructor pure-virtual

13
推荐指数
3
解决办法
4397
查看次数