小编Loa*_*oay的帖子

从构造函数调用全局函数

我有这个代码:

#include <iostream>
using namespace std;

struct A;
struct B;

void g(A* a){ cout << "A";}
void g(B* b){ cout << "B";}

struct A{
    A(){ g(this); }
};

struct B : A{
    B(){}
};


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

其中输出是:

一个

这是否意味着this传递给构造函数的指针A()类型是A*什么类型?

c++ oop

10
推荐指数
2
解决办法
712
查看次数

不安全的模板数组构造函数

这可能是一个简单的问题,但我有这个template class:

template<typename Type>
class Array {
    size_t n;
    Type* buff;
public:
    Array(size_t n_): n(n_), buff(new Type[n]) {}
};
Run Code Online (Sandbox Code Playgroud)

该代码来自课程pdf文件,其中说它buff(new Type[n])不安全.我不明白为什么它不安全,是不是size_t一般都没有签名?我可以举例说明它可能有编译和/或运行时错误吗?

c++

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

为什么抽象类有vtable?

关于这篇文章:

对于使用vtable的实现,答案是:通常是.您可能认为抽象类不需要vtable,因为派生类将具有自己的vtable,但在 构造 期间需要它:在构造基类时,它将vtable指针设置为其自己的vtable.稍后当输入派生类 构造函数时,它将使用自己的vtable代替.

我假设答案是正确的,但我不太明白.为什么vtable需要完全用于施工?

c++ constructor abstract-class pure-virtual vtable

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

将多个C文件编译为单个非可执行对象文件

我有2个文件:

AC

公元前

它们都没有主要功能.如何编译并将它们链接到一个名为Do的单个非可执行文件中?

c linker gcc compilation

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

C++抽象类继承

假设我有这段代码:

class Vehicle {
   virtual const char* media() const = 0;
   virtual unsigned speed() const = 0;
} V, *PV;
class LandVehicle : public Vehicle {
   const char* media() const override{ return "Land";}
} L,  *PL;
class Train : public LandVehicle{
   virtual unsigned speed() const override {return 130;}
} T, *PT;
Run Code Online (Sandbox Code Playgroud)

我有几个问题:D

1)LandVehicle没有实现速度().这是一个错误,如果是这样,会出现什么样的错误?或者它只是使它成为一个抽象类?

2)是正确使用方法media()中的类LandVehicle中的关键字覆盖?作为抽象类的派生类,它真的覆盖了方法吗?

3)与Train的speed()方法中的覆盖相同.

4)现在培养一个具体课程?

5)是否有必要在LandVehicle的media()方法的声明中添加关键字virtual

6)如果我在Train类中添加此方法:

const char* media() const{ return "Just a train";}
Run Code Online (Sandbox Code Playgroud)

它隐藏了LandVehicle的媒体()还是覆盖它?

7)在6中添加方法后,可以在Train类中访问LandVehicle的media()吗?

c++ inheritance

-11
推荐指数
1
解决办法
100
查看次数