Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
帮助在C++中设置和构造类和对象中的静态数组大小_C++_Arrays_Class_Object - Fatal编程技术网

帮助在C++中设置和构造类和对象中的静态数组大小

帮助在C++中设置和构造类和对象中的静态数组大小,c++,arrays,class,object,C++,Arrays,Class,Object,有一个家庭作业,我认为很简单,不用类/对象就可以完成,但我想我对类/对象的理解不够好,无法按照老师要求的方式完成 所有这些都将使用长度始终为20的整数数组来完成 分配需要3个单独的文件: 1个头文件book.h,包含类元素/成员函数/原型1.cpp文件,包含所有成员函数。为此,我将简单地包括一个示例,1.cpp文件,它只包含int main,充当用户所看到的接口和调用成员函数等 //book.h class Shelf{ public: Shelf(); void insert(int); in

有一个家庭作业,我认为很简单,不用类/对象就可以完成,但我想我对类/对象的理解不够好,无法按照老师要求的方式完成

所有这些都将使用长度始终为20的整数数组来完成

分配需要3个单独的文件:

1个头文件book.h,包含类元素/成员函数/原型1.cpp文件,包含所有成员函数。为此,我将简单地包括一个示例,1.cpp文件,它只包含int main,充当用户所看到的接口和调用成员函数等

//book.h
class Shelf{
public:
Shelf();
void insert(int);
int bookshelf[];
};
现在是book.cpp,其中包含成员函数,我真的不知道是否需要这样的构造函数,我是否将数组命名为与book.h中的数组相同的名称

//book.cpp
#include <iostream>  
#include "book.h"
const int shelfSize=20;

Shelf::Shelf(){
    bookshelf[shelfSize];
    for(int i=0; i <shelfSize; i++)
    bookshelf[i]=0;
}
//inserts a book to the end of the list
void Shelf::insert(int booknum){
    for(int i=0; i < shelfSize; i++)
    bookshelf[i] = booknum;
}
现在book_main.cpp,它只提供一个菜单并提示用户:

//book_main.cpp
#include<iostream>

using namespace std;

#include "book.h"

int main(){

Shelf book; //creates a Shelf object named "book"
int isbn=0;
cout<<"Enter ISBN: "<<endl;
cin>>isbn;
book.insert(isbn);
return 0;
}
现在我意识到这个逻辑没有多大意义,除了这个,我的程序中还有很多。我在给它浇水,只是为了说明我有什么问题

1如何在对象和成员函数等中设置数组?我想我的函数设计很糟糕,而且包含所有成员函数的文件中的数组名称不正确。请提供任何建议。此程序可编译,但每次我呼叫电话簿时都会崩溃。请插入以下命令:

//book.h
class Shelf{
public:
    static const int shelfSize = 20;
    Shelf();
    void insert(int);
    int bookshelf[shelfSize];
};
你需要移除书架[书架大小];从构造器中删除行

通过利用初始值设定项列表,可以简化构造函数:

你的插入逻辑没有多大意义;您需要跟踪到目前为止已插入的项目数量,以便知道下一个项目的放置位置

也可以考虑使用一个STD::vector代替原始的C样式数组。它们可以避免一些问题,例如空间不足

试试这个:

//book.h
class Shelf{
public:
    static const int shelfSize = 20;
    Shelf();
    void insert(int);
    int bookshelf[shelfSize];
};
你需要移除书架[书架大小];从构造器中删除行

通过利用初始值设定项列表,可以简化构造函数:

你的插入逻辑没有多大意义;您需要跟踪到目前为止已插入的项目数量,以便知道下一个项目的放置位置

也可以考虑使用一个STD::vector代替原始的C样式数组。它们可以避免一些问题,例如空间不足

书架没有空间了。您的定义不是由大小决定的

//book.h
#define shelfSize 20

class Shelf{
public:
    Shelf();
    void insert(int);
    int bookshelf[shelfSize];
};
以及书籍的使用

//book.cpp
#include <iostream>  
#include "book.h"

Shelf::Shelf(){
    for(int i=0; i <shelfSize; i++)
        bookshelf[i]=0;
}

//inserts a book to the end of the list
void Shelf::insert(int booknum){
    for(int i=0; i < shelfSize; i++)
        bookshelf[i] = booknum;
}
书架没有空间。您的定义不是由大小决定的

//book.h
#define shelfSize 20

class Shelf{
public:
    Shelf();
    void insert(int);
    int bookshelf[shelfSize];
};
以及书籍的使用

//book.cpp
#include <iostream>  
#include "book.h"

Shelf::Shelf(){
    for(int i=0; i <shelfSize; i++)
        bookshelf[i]=0;
}

//inserts a book to the end of the list
void Shelf::insert(int booknum){
    for(int i=0; i < shelfSize; i++)
        bookshelf[i] = booknum;
}

正如Oli指出的,您不能访问空数组的成员:您最好将书架移动隐藏到private:。谢谢,@mattn,我正计划在其他一切都正常工作后再进行此项工作。正如Oli所指出的,您无法访问空数组的成员:你最好将bookshelfmove隐藏到private:。谢谢,@mattn,我本来打算在其他所有东西都正常工作后再做这个。这个构造函数真的将bookshelf的所有值都设置为0吗?在哪里定义为int的默认值?它不需要将任何值设置为0,事实上,我更喜欢大小为20的数组,它还没有在每个元素中输入任何内容。哦,有趣!我不知道:。为了清晰起见,也许可以将其添加到您的答案中8.5.5。默认初始化T类型的对象意味着:。。。如果T是数组类型,则每个元素都默认初始化;-否则,对象初始化为零。定义是递归的,因为每个对象都默认初始化:。@Daniel:是的!虽然您会注意到我匆忙删除了我的评论,因为在C++0x中这似乎已经改变了,但是措辞变为其他,没有执行初始化。所以我不想在这件事上有权威@丹尼尔:继续。。。啊,在C++0x中,空括号表示值初始化,而值初始化又变成了以零初始化结束的传统递归定义。该构造函数真的将bookshelf的所有值都设置为0吗?在哪里定义为int的默认值?它不需要将任何值设置为0,事实上,我更喜欢大小为20的数组,它还没有在每个元素中输入任何内容。哦,有趣!我不知道:。为了清晰起见,也许可以将其添加到您的答案中8.5.5。默认初始化T类型的对象意味着:。。。如果T是数组类型,则每个元素都默认初始化;-否则,对象初始化为零。定义是递归的,因为每个对象都默认初始化:。@Daniel:是的!虽然您会注意到我匆忙删除了我的评论,因为在C++0x中这似乎已经改变了,但是措辞变为其他,没有执行初始化。所以我不想在这件事上有权威@丹尼尔:继续。。。啊,在C++0x中,空括号表示值初始化,这 反过来,它又变成了以零初始化结束的传统递归定义。