小编Vul*_*rao的帖子

C++:从父实例化调用子方法

在我的代码中,我实现了这些类:

class A
{
  public:
    virtual int fun() { return 0; }
}

class B : public A
{
  public:
    virtual int fun() { return 1; }
}
Run Code Online (Sandbox Code Playgroud)

而这些功能:

void operation(A a)
{
  printf("%d\n",a.fun());
}

int main()
{
  B b;
  operation(b);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,B类继承了A,并实现了虚拟继承方法fun().主类调用一个函数,该函数接受A in参数并调用该fun()方法,并在参数中使用B对象.

在执行时,我希望"1"打印字符串,但就是"0"这样(即使它是传递给B的B对象operation()).

我需要这样做,因为我有几个B类(B1,B2等...),我希望该函数operation()是通用的.我不需要operation()在类A中实现,但如果我声明operation()纯虚拟,则编译失败operation()说我无法实例化A(这是非常期待的).

我发现很多话题都讨论了父/子方法调用和继承,但没有一个人准确地讨论过这个问题.

有人能帮我吗 ?

谢谢.

c++ inheritance

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

C中的"goto"行为:如何处理符号?

我想知道,在以下代码中:

{
    int i = 42;
    goto end;
}
end:
Run Code Online (Sandbox Code Playgroud)

当我们到达终点时,符号i的状态是什么:(我们在调试器中会看到什么)?它是否仍然存在,即使我们超出了范围?是否存在标准行为或是否依赖于编译器?

为了示例,我们假设代码是使用带有调试符号的gcc编译的.

辅助地,C++中的行为是一样的吗?

谢谢.

c symbols goto

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

vim:如何删除行中间的空格

问题出在这里:在我正在进行的项目中,禁止使用标签,我们只被告知要使用空格.但有时,我最终编辑了一个遗留源文件,其中包含缩进和代码对齐的选项卡.

使用选项卡的代码示例(选项卡字符显示为"| >>>"):

|>>>int a =||>>>|>>>0;
|>>>int foobar =|>>>10;
|>>>int toto =|>|>>>4;
Run Code Online (Sandbox Code Playgroud)

这是一个示例,但您必须考虑整个文件已满,以至于无法手动纠正.

我通常做一个像这样的简单搜索替换来替换制表空间:

:%s/\t/    /g
Run Code Online (Sandbox Code Playgroud)

但代码最终会像这样:

    int a =            0;
    int foobar =    10;
    int toto =        4;
Run Code Online (Sandbox Code Playgroud)

所有的价值都没有对齐.

我想要的是一个可以删除无用空间而不是缩进的命令,以获得这样的东西:

    int a = 0;
    int foobar = 10;
    int toto = 4;
Run Code Online (Sandbox Code Playgroud)

也就是说,除了缩进之外,每组2+空格必须减少到只有1个空格.

vim

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

“memcpy 必须给出有效的指针”:我在标准中哪里可以找到这个?

cppref上指出

如果 或destsrc无效指针或空指针,则行为未定义,即使count为零

memset和也有同样的规定memmove

我的问题是:标准中哪里有规定?我需要向我的客户证明这是一个 UB,但是指向 cppref 文章的链接不行,我需要标准中的参考。

标准的公开草案

c++ memcpy language-lawyer

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

标签 统计

c++ ×2

c ×1

goto ×1

inheritance ×1

language-lawyer ×1

memcpy ×1

symbols ×1

vim ×1