小编Max*_*xpm的帖子

从Array构造

我正在为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++ arrays class

0
推荐指数
1
解决办法
277
查看次数

私人和受保护的成员

我无法理解 C++ 类中私有成员和受保护成员之间的区别。简单来说,有什么区别?

c++ private class protected member

0
推荐指数
1
解决办法
2375
查看次数

文件的异常处理

如果程序试图使用我的文件读取类来访问不存在的文件的一部分(即,在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)

c++ exception file

0
推荐指数
1
解决办法
327
查看次数

具有不同数据类型的纯虚方法

我正在为我的容器类创建一个基类,因此我可以维护一致的接口.它目前看起来像这样:

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()可能需要具有彼此不同的返回类型.如果基类中没有每个不同返回类型的模板参数,我如何为派生类提供一些改变这种东西的空间?

编辑:

派生类使用的类型可能完全不同且不变.实际上,除了方法名称之外,派生类不保证具有任何类型的共同点.

c++ oop inheritance templates virtual-functions

0
推荐指数
1
解决办法
717
查看次数