问题如标题所述:将方法/属性标记为虚拟的性能影响是什么?
注意 - 我假设虚拟方法在常见情况下不会过载; 我通常会在这里使用基类.
"虚拟"继承的含义是什么?
我看到以下代码,并且virtual在以下上下文中不理解关键字的含义:
class A {};
class B : public virtual A;
Run Code Online (Sandbox Code Playgroud) 为什么以下示例打印"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) 因此,对于创建文件,我使用以下内容:
fileHandle = open('fileName', 'w')
Run Code Online (Sandbox Code Playgroud)
然后将内容写入文件,关闭文件.在下一步中,我处理文件.在程序结束时,我最终得到了一个我需要删除的"物理文件".
有没有写一个"虚拟"的文件,它的行为完全像一个"物理"一个(允许其操作方法相同),但在Python中运行结束时不存在的方式吗?
我确实在SO上发现了一些类似标题的问题 - 但是当我读到答案时,他们关注的是问题的不同部分,这些部分是非常具体的(例如STL /容器).
有人可以告诉我为什么你必须使用指针/引用来实现多态?我可以理解指针可能会有所帮助 - 但肯定只能引用区分传值和传递参考?
当然,只要你在堆上分配内存 - 这样你就可以拥有动态绑定,那么这就足够了 - 显然不是.
据我所知,抽象方法和纯虚函数都没有提供任何功能......那么我们可以说它们都是同一个东西吗?
此外,假设一个类(不一定声明为抽象)包含许多实现的方法(不是抽象或虚拟),但包含纯虚函数.这个类是抽象的吗?
说我们有:
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++,发现下面的代码非常奇怪.
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查找,并且只能使用有效对象.
我有以下问题
say_hiNULL指针?foo分配?有什么想法吗?
每种方法的优点和缺点是什么?
什么时候应该选择什么?做出这个决定时应该记住哪些要点?
我记得在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
virtual ×10
c++ ×6
c# ×3
polymorphism ×2
abstract ×1
class ×1
constructor ×1
file ×1
function ×1
inheritance ×1
interface ×1
null ×1
null-pointer ×1
oop ×1
performance ×1
pointers ×1
python ×1