Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
追加';=x';在c+中的方法声明之后+; 在C++中,当声明一个方法时,我注意到,有时该方法可能有一个附加的赋值。_C++_Syntax_Language Features - Fatal编程技术网

追加';=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:不,您仍然声称“没有可用的实际定义”。比尔甚至提出了一个例子,其中必须有一个实际的定义。而且,(现在,我进入了一个有点迂腐的模式)与他所写的相反,任何子类都可以不重写它。然后它也将是抽象的,但是如果没有人创建它的对象(除了作为基类子对象),那就好了。