小编Gil*_* PJ的帖子

如何检查对象是否是基类类型

我有以下继承层次结构

class A{
  virtual bool fun() = 0;
};

class B: public A{
...
}

class C: public B{
...
}

class D: public C{
...
}

class E: public B{
...
}
Run Code Online (Sandbox Code Playgroud)

在我正在执行的主程序中

for(auto pA: ObjVector)
{
   if(pA->fun()){
       ...
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我想知道pA是否包含基类B对象.据我所知2种方式

  1. dynamic_cast所有派生类的对象和测试,如果它全部失败dynamic_casts并且只传递,B我们确定该对象是类型的B

  2. 再添加一个接口方法,该方法将返回类型enumeration 值并标识该B对象.

是否有其他方法来识别B班级?

c++ inheritance

3
推荐指数
1
解决办法
1113
查看次数

munmap、mmap的功能是什么

当我尝试研究一些处理 FPGA 的代码时,我遇到了 munmap、mmap。

我仔细阅读此处提供的手册。我仍然不明白这个功能的目的。这究竟是做什么的?

c c++ linux system-calls

3
推荐指数
1
解决办法
6597
查看次数

移动构造函数并双删除

最初我认为移动构造函数不会调用临时对象析构函数,但是当我尝试它时调用析构函数.所以当我们从移动构造函数中窃取数据时,我得到双删除错误.

#include <iostream>
using namespace std;

class A
{
    public:
    A()
    : name("default")
    {
        cout<<"i am default\n";
        data = new char[20];
    }

    A(A&& t)
    : name("move")
    {
        data = t.data;
        cout<<"i am move\n";
    }

    ~A()
    {
        delete data;
        cout<<"I am done:"<<name<<endl;
    }

    char * data;
    string name;
};

A getA()
{
    A obj;
    return obj;
}

int main()
{
    A test(std::move(getA()));
}
Run Code Online (Sandbox Code Playgroud)

c++ move move-semantics c++11

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

ISO C++禁止在C++代码中比较指针和整数[-fpermissive]

我的代码有问题.它始终返回错误ISO C++禁止指针和整数[-fpermissive]之间的比较.你能帮我看看这里有什么问题以及如何解决?

#include <iostream>
using namespace std;
char x;
int main()
{
    cout << "Welcome to the citation machine. What do you want to cite?" << endl;
    cin >> x;
    if (x == "book")
    {
        cout << "What is the name of the book?";
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers

0
推荐指数
1
解决办法
1060
查看次数

标签 统计

c++ ×4

c ×1

c++11 ×1

inheritance ×1

linux ×1

move ×1

move-semantics ×1

pointers ×1

system-calls ×1