我有一个代码片段如下:
#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) 我现在对继承很困惑。我计划简单地覆盖变量的初始值。在下面的代码中,我只是继承基类并尝试获取它的名称,该名称在类中保存为字符串。我期望派生类可以覆盖该值,但它没有这样做。
我的预期输出是
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)