标签: virtual

将方法/属性标记为虚拟的性能影响是什么?

问题如标题所述:将方法/属性标记为虚拟的性能影响是什么?

注意 - 我假设虚拟方法在常见情况下不会过载; 我通常会在这里使用基类.

c# performance virtual

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

虚拟继承

"虚拟"继承的含义是什么?

我看到以下代码,并且virtual在以下上下文中不理解关键字的含义:

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

c++ virtual inheritance

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

构造函数的C++虚函数

为什么以下示例打印"0"以及必须更改它以打印"1",如我所料?

#include <iostream>
struct base {
   virtual const int value() const {
      return 0;
   }
   base() {
      std::cout << value() << std::endl;
   }
   virtual ~base() {}
};

struct derived : public base {
   virtual const int value() const {
      return 1;
   }
};

int main(void) {
   derived example;
}
Run Code Online (Sandbox Code Playgroud)

c++ oop virtual constructor class

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

如何进行虚拟文件处理?

因此,对于创建文件,我使用以下内容:

fileHandle = open('fileName', 'w')
Run Code Online (Sandbox Code Playgroud)

然后将内容写入文件,关闭文件.在下一步中,我处理文件.在程序结束时,我最终得到了一个我需要删除的"物理文件".

有没有写一个"虚拟"的文件,它的行为完全像一个"物理"一个(允许其操作方法相同),但在Python中运行结束时不存在的方式吗?

python virtual file

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

为什么没有指针/引用时多态性不起作用?

我确实在SO上发现了一些类似标题的问题 - 但是当我读到答案时,他们关注的是问题的不同部分,这些部分是非常具体的(例如STL /容器).

有人可以告诉我为什么你必须使用指针/引用来实现多态?我可以理解指针可能会有所帮助 - 但肯定只能引用区分传值和传递参考?

当然,只要你在堆上分配内存 - 这样你就可以拥有动态绑定,那么这就足够了 - 显然不是.

c++ polymorphism virtual pointers

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

抽象方法和纯虚函数是一回事吗?

据我所知,抽象方法和纯虚函数都没有提供任何功能......那么我们可以说它们都是同一个东西吗?

此外,假设一个类(不一定声明为抽象)包含许多实现的方法(不是抽象或虚拟),但包含纯虚函数.这个类是抽象的吗?

c++ virtual function

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

从基类调用虚函数

说我们有:


Class Base
{   
    virtual void f(){g();};
    virtual void g(){//Do some Base related code;}
};

Class Derived : public Base
{   
    virtual void f(){Base::f();};
    virtual void g(){//Do some Derived related code};
};

int main()
{
    Base *pBase = new Derived;
    pBase->f();
    return 0;  
}

Run Code Online (Sandbox Code Playgroud)

哪个g()会被召唤Base::f()Base::g()还是Derived::g()

谢谢...

c++ polymorphism virtual

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

访问NULL指针上的类成员

我正在尝试使用C++,发现下面的代码非常奇怪.

class Foo{
public:
    virtual void say_virtual_hi(){
        std::cout << "Virtual Hi";
    }

    void say_hi()
    {
        std::cout << "Hi";
    }
};

int main(int argc, char** argv)
{
    Foo* foo = 0;
    foo->say_hi(); // works well
    foo->say_virtual_hi(); // will crash the app
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道虚方法调用崩溃,因为它需要vtable查找,并且只能使用有效对象.

我有以下问题

  1. 非虚方法如何处理say_hiNULL指针?
  2. 对象在哪里foo分配?

有什么想法吗?

c++ null virtual null-pointer

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

比较:界面方法与虚拟方法与抽象方法

每种方法的优点和缺点是什么?

  • 界面方法
  • 虚拟方法
  • 抽象方法

什么时候应该选择什么?做出这个决定时应该记住哪些要点?

c# virtual interface abstract

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

导航属性应该是虚拟的 - 在ef核心中不需要?

我记得在EF 导航属性应该是虚拟的:

public class Blog 
{  
    public int BlogId { get; set; }  
    public string Name { get; set; }  
    public string Url { get; set; }  
    public string Tags { get; set; }  

    public virtual ICollection<Post> Posts { get; set; }  
}
Run Code Online (Sandbox Code Playgroud)

但我看看EF Core并不认为它是虚拟的:

public class Student
    {
        public int ID { get; set; }
        public string LastName { get; set; }
        public string FirstMidName { get; set; }
        public DateTime EnrollmentDate { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# virtual entity-framework navigation-properties entity-framework-core

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