Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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
C++ 扩展类中的可选virutal函数,在运行时测试它是否存在 A类{ 公众: 无效(*_start)()=0; void start(){ cout_C++_Oop - Fatal编程技术网

C++ 扩展类中的可选virutal函数,在运行时测试它是否存在 A类{ 公众: 无效(*_start)()=0; void start(){ cout

C++ 扩展类中的可选virutal函数,在运行时测试它是否存在 A类{ 公众: 无效(*_start)()=0; void start(){ cout,c++,oop,C++,Oop,有点傻 我可以简单地将可选函数定义为virtualvoid\u start(){};,而不是virtualvoid\u start()=0;。具有与上面所需代码完全相同的行为 导致: A类{ 公众: 虚空_start(){}; void start(){ cout有点傻 我可以简单地将可选函数定义为virtualvoid\u start(){};,而不是virtualvoid\u start()=0;。具有与上面所需代码完全相同的行为 导致: A类{ 公众: 虚空_start(){}; void

有点傻

我可以简单地将可选函数定义为
virtualvoid\u start(){};
,而不是
virtualvoid\u start()=0;
。具有与上面所需代码完全相同的行为

导致:

A类{
公众:
虚空_start(){};
void start(){
cout有点傻

我可以简单地将可选函数定义为
virtualvoid\u start(){};
,而不是
virtualvoid\u start()=0;
。具有与上面所需代码完全相同的行为

导致:

A类{
公众:
虚空_start(){};
void start(){

如果没有类A,类B和类C是不存在的,类A分别是B和C的一部分。考虑到这一点,类A不必担心它是否被其他类继承

考虑到这一点,您可以简化代码。下面您可以找到一个代码可能为的示例:

struct A {
    void start() {
         cout << "Le ";
    }
};

struct B : public A {
    void start() {
         A::start();
         cout << "Blop\n";
    }
};

struct C : public A {
    void start() {
         A::start();
    }
};

int main () {
    B b;
    C c;

    b.start();
    c.start();

  return 0;
}
结构A{ void start(){
如果没有类A,类B和类C是不存在的,类A分别是B和C的一部分。考虑到这一点,类A不必担心它是否被其他类继承

考虑到这一点,您可以简化代码。下面您可以找到一个代码可能为的示例:

struct A {
    void start() {
         cout << "Le ";
    }
};

struct B : public A {
    void start() {
         A::start();
         cout << "Blop\n";
    }
};

struct C : public A {
    void start() {
         A::start();
    }
};

int main () {
    B b;
    C c;

    b.start();
    c.start();

  return 0;
}
结构A{ void start(){
如果没有虚拟方法,您可以执行以下操作:

class B : public A {
public:
    B() {
        _start = [](){ std::cout<<"Blop\n";};
    }
};
B类:公共A类{
公众:
B(){

_start=[](){std::cout如果没有虚拟方法,您可以执行以下操作:

class B : public A {
public:
    B() {
        _start = [](){ std::cout<<"Blop\n";};
    }
};
B类:公共A类{
公众:
B(){

_start=[](){std::coutvirtual方法根据定义是可选的,所以如果您真的想使用基类,它们在基类中的空实现与此等效。您想静态或多态地访问它吗?如果解决方案有点“冗长”,第一个方法可以是带有CRTP的dome我建议不要在变量、对象等的名称前使用下划线“389;”,因为它通常由C++的内部对象使用。根据定义,虚拟方法是可选的,所以如果您确实想使用基类,它们在基类中的空实现与此等效。您想静态地还是多态地访问它?第一个可以是如果解决方案有点“冗长”,则使用CRTP圆顶我建议不要在变量名、对象名等之前使用下划线“uu”,因为它通常由C++的内部对象使用。好吧,如果这是您想要它的行为,是的。还有更深奥的用例:P仍然可以将该方法设置为某个空值,并且可以选择测试该方法是否在运行时定义。好吧,如果这就是你想要它的行为,是的。还有更深奥的用例:P仍然可以将方法设置为一些空值,并且可以选择测试方法是否在运行时定义。