相关疑难解决方法(0)

覆盖派生类中的成员字段

我有一个代码片段如下:

#include <iostream>

using namespace std;

class Base {
public:
    Base() : b(0) {}
    int get();
    virtual void sayhello() { cout << "Hello from Base with b: " << b << endl; }
private:
    int b;
};

int Base::get() {sayhello(); return b;} 

class Derived : public Base {
public:
    Derived(double b_):b(b_){}
    void sayhello() { cout << "Hello from Derived with b: " << b << endl; }
private:
    double b;
};

int main() {
    Derived d(10.0);
    Base b = d; …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

10
推荐指数
2
解决办法
3万
查看次数

覆盖基类成员变量的初始值

我现在对继承很困惑。我计划简单地覆盖变量的初始值。在下面的代码中,我只是继承基类并尝试获取它的名称,该名称在类中保存为字符串。我期望派生类可以覆盖该值,但它没有这样做。

我的预期输出是

Derived
Derived
Run Code Online (Sandbox Code Playgroud)

不过我得到

Base
Base
Run Code Online (Sandbox Code Playgroud)

实施以下内容的正确方法是什么?

#include <iostream>
#include <string>

struct Base {
    virtual ~Base() = default;
    virtual void id(){
        std::cout << id_ << std::endl;
    }
    std::string id_ = "Base";
};   



struct Derived : public Base {
    virtual ~Derived() = default;
    std::string id_ = "Derived";
};   


int main(){
    Base* b = new Derived();
    Derived* d = new Derived();
    b->id();
    d->id();
    delete d;
    delete b;                                                                                                          
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

5
推荐指数
1
解决办法
5888
查看次数

标签 统计

c++ ×2

c++11 ×1

inheritance ×1