我 C++玩的不怎么样。尤其是继承。所以想多学习学习。
有一个基类对象,我想在它上面加一部分功能,就做了一个派生类(但派生类没法做到完美继承基类,因为其中基类有一堆的注册函数,搞定太复杂)。
于是,我就想,通过派生类指针 + 基类的对象,来实现功能的添加。
我试了但是不工作不了
#include <iostream>
#include <string>
#include <memory>
using std::string;
using std::cout;
using std::endl;
using std::shared_ptr;
class Base {
public:
Base(const char * str): token(str) {}
virtual void addComment() { token+="is the most beautiful language!"; }
void speakOut() const { cout<<token<<endl; }
protected:
string token;
};
class Derived: public Base {
public:
Derived(const char* str): Base(str) {}
void addComment() { token="Python is the most beautiful language!"; }
};
int main() {
// ----- base_ptr call base_object -----
shared_ptr<Base> ptr_base_obj(new Base("C++"));
ptr_base_obj->addComment();
ptr_base_obj->speakOut();
// ----- derived_ptr call derived_object -----
shared_ptr<Derived> ptr_derived_obj(new Derived("PHP"));
ptr_derived_obj->addComment();
ptr_derived_obj->speakOut();
// ----- derived_ptr call base_object -----
shared_ptr<Base> ptr_base_obj2(new Base("PHP"));
// downcasting base to derived ptr
shared_ptr<Derived> ptr_derived_obj2 = std::dynamic_pointer_cast<Derived>(ptr_base_object2);
ptr_derived_obj2->addComment();
ptr_derived_obj2->speakOut();
return 0;
}
执行结果:
C++ is the most beautiful language!
Python is the most beautiful language!
Segmentation fault
想问,到底该怎么做,才能实现这个的需求。
另外,谁能把代码中 PHP is the most beautiful language!给输出出来?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.