追加';=x';在c+中的方法声明之后+; 在C++中,当声明一个方法时,我注意到,有时该方法可能有一个附加的赋值。
谁能告诉我这是什么吗 例如:追加';=x';在c+中的方法声明之后+; 在C++中,当声明一个方法时,我注意到,有时该方法可能有一个附加的赋值。,c++,syntax,language-features,C++,Syntax,Language Features,谁能告诉我这是什么吗 例如: virtual void MyMethod () = 0; “=0”是什么意思 谢谢大家 这意味着它是一个纯虚拟函数,即该类中没有可用的实际定义,必须在子类中重写它。它实际上并不是赋值,零是唯一可以“赋值”的值 这是C++语法;在C#中,使用abstract关键字也可以实现同样的效果。在C#中,这是一个语法错误 如果你是C++,请参阅CalMH的答案。< P> C++,这意味着该方法是纯虚方法。 这意味着无法实例化此特定类类型的实例。您只能创建由此派生的类的实例,
virtual void MyMethod () = 0;
“=0”是什么意思
谢谢大家 这意味着它是一个纯虚拟函数,即该类中没有可用的实际定义,必须在子类中重写它。它实际上并不是赋值,零是唯一可以“赋值”的值
这是C++语法;在C#中,使用
abstract
关键字也可以实现同样的效果。在C#中,这是一个语法错误
如果你是C++,请参阅CalMH的答案。
< P> C++,这意味着该方法是纯虚方法。 这意味着无法实例化此特定类类型的实例。您只能创建由此派生的类的实例,这些实例重写基类中的所有纯虚方法 带有纯虚方法的基类定义了派生类必须实现的接口,而不是单独使用的接口与calmh声称的相反,据我所知,纯虚函数可以实现,并且可以显式调用
#include <cstdio>
class A
{
public:
virtual void foo() const = 0; //pure virtual
};
void A::foo() const { puts("A::foo"); }
class B: public A
{
public:
virtual void foo() const { puts("B::foo"); }
};
int main()
{
//A a; //this would be an error - main point of having pure virtual functions
B b;
b.foo();
b.A::foo();
}
#包括
甲级
{
公众:
虚拟void foo()const=0;//纯虚拟
};
void A::foo()常量{puts(“A::foo”);}
B类:公共A
{
公众:
虚拟void foo()常量{puts(“B::foo”);}
};
int main()
{
//A;//这将是一个错误—使用纯虚函数的要点
B B;
b、 foo();
b、 A::foo();
}
通常,人们不会这样做,除非虚拟析构函数在基类中是纯的(在这种情况下必须定义)。C++,我认为C++是C + +,流是交叉的。(不要跨流)可能重复谢谢大家,我理解它像一个抽象方法一样工作,必须在子类中重写(实现)。C++0x将引入一些新的
x
合法值,而不是0
:delete
,以指定函数不存在(删除默认构造函数或赋值运算符,或防止隐式转换)和“代码>默认值/CODE >显式指定函数的默认实现。这是假设OP的C++,他可能已经这么做了。在C语言中,与此等价的是标记方法<代码>抽象<代码>,而不是赋予它一个体。甚至没有任何零值将被保存。只有<代码> 0代码>在这里是有效的,它是直接作为格莱姆的。ar符号。0L
或其他东西不起作用。例如,虽然在某些编译器上使用NULL
可能会起作用(因为它对它们扩展为0
),但在其他编译器上可能不起作用:)关于无定义的位不一定是真的。相反,它只是意味着派生类需要实现该函数。如果不是,则无法实例化。GMan是正确的。即使您将析构函数设置为纯虚拟的,您仍然需要为它提供一个定义。纯虚拟意味着必须在任何子类中定义函数,然后才能实例化该子类。@calmh:不,您仍然声称“没有可用的实际定义”。比尔甚至提出了一个例子,其中必须有一个实际的定义。而且,(现在,我进入了一个有点迂腐的模式)与他所写的相反,任何子类都可以不重写它。然后它也将是抽象的,但是如果没有人创建它的对象(除了作为基类子对象),那就好了。