在一个项目中,我们的团队正在使用对象列表对数据集执行大规模操作,这些数据集应以类似的方式处理.特别地,理想情况下不同的对象将起到相同的作用,这将通过多态性非常容易地实现.我遇到的问题是继承意味着是一种关系,而不是一种关系.例如,有几个对象有一个损坏计数器,但为了使它易于在对象列表中使用,可以使用多态 - 除非这意味着一个关系是不正确的.(一个人不是破坏计数器.)
我能想到的唯一解决方案是让类的成员在隐式转换时返回正确的对象类型,而不是依赖继承.是不是更好的放弃是一个/有一个理想,以换取编程的简易性?
编辑:更具体地说,我正在使用C++,因此使用多态将允许不同的对象"行为相同",即派生类可以驻留在单个列表中并由基础的虚函数操作类.使用接口(或通过继承模仿它们)似乎是我愿意使用的解决方案.
我想编写自己的操作系统,并希望暂时跳过编写内核的复杂任务,稍后再使用Linux内核返回它.但是,我想提供操作系统作为现在的封闭源.Linux内核有哪些许可证,是否可以将其用于封闭源操作系统的发布?
编辑:我对关闭Linux内核的源码不感兴趣,我仍然会将其作为开源提供.我想知道我是否可以使用带有开源内核的封闭源操作系统.
进一步编辑:操作系统,我指的是在内核之上运行的系统,用于启动其他程序.我当然不是要将内核包含在封闭的源语句中.
在使用一些模板并使用迭代器编写自己的基本容器类时,我发现自己需要将成员函数体从模板类移动到单独的文件中以符合样式指南.但是,我遇到了一个有趣的编译错误:
runtimearray.cpp:17:错误:'&'令牌之前的构造函数,析构函数或类型转换runtimearray.cpp:24:错误:'&'令牌之前的构造函数,析构函数或类型转换runtimearray.cpp:32:错误: '&'标记之前的预期构造函数,析构函数或类型转换runtimearray.cpp:39:错误:'&'标记之前的构造函数,析构函数或类型转换runtimearray.cpp:85:错误:预期的构造函数,析构函数或类型转换在"RuntimeArray"之前runtimearray.cpp:91:错误:在'RuntimeArray'之前的预期构造函数,析构函数或类型转换
runtimearray.h:
#ifndef RUNTIMEARRAY_H_
#define RUNTIMEARRAY_H_
template<typename T>
class RuntimeArray
{
public:
class Iterator
{
friend class RuntimeArray;
public:
Iterator(const Iterator& other);
T& operator*();
Iterator& operator++();
Iterator& operator++(int);
Iterator& operator--();
Iterator& operator--(int);
bool operator==(Iterator other);
bool operator!=(Iterator other);
private:
Iterator(T* location);
T* value_;
};
RuntimeArray(int size);
~RuntimeArray();
T& operator[](int index);
Iterator Begin();
Iterator End();
private:
int size_;
T* contents_;
};
#endif // RUNTIMEARRAY_H_
Run Code Online (Sandbox Code Playgroud)
runtimearray.cpp:
#include "runtimearray.h"
template<typename T>
RuntimeArray<T>::Iterator::Iterator(const Iterator& other)
: value_(other.value_)
{
}
template<typename T>
T& …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个程序来处理从文件中读入的unicode字符串.我想到了两种方法 - 一种是我读取包含换行符的整个文件,执行几次正则表达式替换,然后将其写回另一个文件; 另一个我在文件中逐行读取并匹配各行并替换它们并将其写出来的地方.我无法测试第一种方法,因为字符串中的换行符不会写为文件的换行符.以下是一些示例代码:
String output = "Hello\nthere!";
BufferedWriter oFile = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("test.txt"), "UTF-16"));
System.out.println(output);
oFile.write(output);
oFile.close();
Run Code Online (Sandbox Code Playgroud)
print语句输出
你好
!
但文件内容是
你好!
为什么我的换行不写入文件?
c++ ×2
file-io ×1
inheritance ×1
java ×1
kernel ×1
licensing ×1
linux ×1
nested-class ×1
oop ×1
polymorphism ×1
string ×1
templates ×1
unicode ×1