我正在为C++开发一个简单的容器类,我意识到能够从数组中复制值会很有帮助.
这是有区别的:
myClass myInstance;
myInstance += 2;
myInstance += 4;
myInstance += 8;
myInstance += 16;
Run Code Online (Sandbox Code Playgroud)
还有这个:
myClass myInstance;
int myArray[] = {2, 4, 8, 16};
myInstance = myArray;
Run Code Online (Sandbox Code Playgroud)
显然,阵列结构更清洁.但是,由于无法获取传递给函数的数组的大小(在本例中operator=),因此复制值是个问题.
我可以将大小作为参数与数组一起传递,但这意味着我无法使用operator=:
myInstance.getArrayValues(myArray, 4);
Run Code Online (Sandbox Code Playgroud)
是不是很直观
myInstance = myArray;
Run Code Online (Sandbox Code Playgroud)
通常如何处理这样的事情?
我无法理解 C++ 类中私有成员和受保护成员之间的区别。简单来说,有什么区别?
如果程序试图使用我的文件读取类来访问不存在的文件的一部分(即,在ios_base :: end之后),应该抛出什么异常?
我打算使用std :: out_of_range,但现在我开始认为std :: runtime_error会更合适.
编辑:
该接口与标准fstream类的工作方式略有不同,因为它基于for循环而不是while循环.所以不要做以下事情:
while (MyFile.peek() != EOF)
{
char Character = MyFile.get();
// Do stuff with Character.
}
Run Code Online (Sandbox Code Playgroud)
该类的用户可以这样做:
for (std::streampos Pos = 0; Pos < MyFile.GetCharCount(); Pos++)
{
char Character = MyFile.GetChar(Pos);
// Do stuff with Character.
}
Run Code Online (Sandbox Code Playgroud) 我正在为我的容器类创建一个基类,因此我可以维护一致的接口.它目前看起来像这样:
template <typename Datatype>
class BaseClass
{
public:
virtual Datatype Foo() = 0;
virtual Datatype Bar() = 0;
};
template <typename Datatype>
class DerivedClass: public BaseClass<Datatype>
{
public:
virtual Datatype Foo()
{
}
virtual Datatype Bar()
{
}
};
Run Code Online (Sandbox Code Playgroud)
然而,我的一些派生类,Foo()并Bar()可能需要具有彼此不同的返回类型.如果基类中没有每个不同返回类型的模板参数,我如何为派生类提供一些改变这种东西的空间?
编辑:
派生类使用的类型可能完全不同且不变.实际上,除了方法名称之外,派生类不保证具有任何类型的共同点.