c++ - 可以将原型(prototype) OOP 视为 C++ 中的范例吗?

标签 c++ c++11 prototype paradigms

你好,

考虑以下代码,可以将原型(prototype) OOP 分类为

C++?

#include <iostream>

template< class... Bases >
struct TestClass : public Bases...
{
    int a;
    template< class... Parents >
    TestClass< Parents... >* Create() {
        return new TestClass< Parents... >();
    }
    TestClass< Bases... >* Create() {
        return new TestClass< Bases... >();
    }
};
struct Foo {
    int fizz;
};
struct Bar {
    int buzz;
};
int main()
{
    TestClass< Foo > a;
    a.a = 10;
    a.fizz = 20;
    std::cerr << a.fizz << "\n";
    std::cerr << a.a << "\n";
    auto b = a.Create();
    b->fizz = 30;
    std::cerr << b->fizz << "\n";
    auto c = b->Create< Bar >();
    c->buzz = 357;
    std::cerr << c->buzz << "\n";
    auto d = b->Create< Foo, Bar >();
    d->fizz = 0;
    d->buzz = 1;
    std::cerr << d->fizz << "\n";
    std::cerr << d->buzz << "\n";
    return 0;
}

仅供引用,我忘了管理我的内存,抱歉!

最佳答案

不,我不这么认为。 “原型(prototype)”和“经典”OO 之间的主要区别在于原型(prototype) OO 没有类:原型(prototype)本身就是一个对象。如果原型(prototype)被修改,所有从它“继承”的对象也会随之修改。在本示例中,情况并非如此。

关于c++ - 可以将原型(prototype) OOP 视为 C++ 中的范例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168347/

相关文章:

c++ - directx 9 : basic lighting on c++ 6?

c++ - 使用 Boost 发送序列化结构但出现输入流错误

c++ - `std::common_type` 是关联的吗?

c++ - 确保谓词函数在 C++ 模板函数中有效

c++ - 链接 C++17、C++14 和 C++11 对象是否安全

javascript对象原型(prototype)似乎坏了

javascript - 如何更改一个实例的数组

c++ - 访问父类(super class)实例的 protected 成员

javascript - 为什么某些对象方法的声明方式与其他方法不同

c++ - 使 boost::fusion::result_of::as_set<> 's instance doesn' t 调用其元素的构造函数