Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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++ 函数重写不起作用_C++_Inheritance_Overriding - Fatal编程技术网

C++ 函数重写不起作用

C++ 函数重写不起作用,c++,inheritance,overriding,C++,Inheritance,Overriding,关于继承和函数重写的问题 // base.h class Base { protected: void a(); public: void b(); } // base.cc void Base::a() { // Empty. return; } void Base::b() { this->a(); } // derived.h class Derived : public Base { protected: void a(); }

关于继承和函数重写的问题

// base.h
class Base {
protected:
    void a();
public:
    void b();
}

// base.cc
void Base::a() {
    // Empty.
    return;
}

void Base::b() {
    this->a();
}

// derived.h
class Derived : public Base {
protected:
    void a();
}

// derived.cc
void Derived::a() {std::cout << "OK" << std::endl;}
//base.h
阶级基础{
受保护的:
使a()无效;
公众:
无效b();
}
//base.cc
void Base::a(){
//空的。
返回;
}
void Base::b(){
这个->a();
}
//导出的.h
派生类:公共基{
受保护的:
使a()无效;
}
//派生的.cc

void-Derived::a(){std::cout必须声明一个函数
virtual
,才能使继承工作

// base.h
class Base {
protected:
    void a();
public:
    virtual void b();
}

您必须声明一个函数
virtual
,才能使继承生效

// base.h
class Base {
protected:
    void a();
public:
    virtual void b();
}

您必须声明一个函数
virtual
,才能使继承生效

// base.h
class Base {
protected:
    void a();
public:
    virtual void b();
}

您必须声明一个函数
virtual
,才能使继承生效

// base.h
class Base {
protected:
    void a();
public:
    virtual void b();
}

您需要在基类声明中标记
b()
virtual

class Base {
protected:
    void a();
public:
    virtual void b();
};

注意类声明结束时的分号:C++中需要的。注意,在派生类中不需要编写代码>虚拟< /C>,尽管有些人采用了这种风格。


(多态性不是C++中的自动,不像java).< /p> 在基类声明中,需要标记<代码> b](<代码> >代码>虚拟<代码>:

class Base {
protected:
    void a();
public:
    virtual void b();
};

注意类声明结束时的分号:C++中需要的。注意,在派生类中不需要编写代码>虚拟< /C>,尽管有些人采用了这种风格。


(多态性不是C++中的自动,不像java).< /p> 在基类声明中,需要标记<代码> b](<代码> >代码>虚拟<代码>:

class Base {
protected:
    void a();
public:
    virtual void b();
};

注意类声明结束时的分号:C++中需要的。注意,在派生类中不需要编写代码>虚拟< /C>,尽管有些人采用了这种风格。


(多态性不是C++中的自动,不像java).< /p> 在基类声明中,需要标记<代码> b](<代码> >代码>虚拟<代码>:

class Base {
protected:
    void a();
public:
    virtual void b();
};

注意类声明结束时的分号:C++中需要的。注意,在派生类中不需要编写代码>虚拟< /C>,尽管有些人采用了这种风格。


<>(多态性不是C++中的自动,不像java).

a
在派生类中重写
会产生指向问题的错误:-)
a
在派生类中重写会产生指向问题的错误:-)
a
在派生类中重写会产生指向问题的错误:-)
重写
在派生类中派生类中的de>a将产生指向问题的错误:-)