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

Help Setting/Constructing Static Array Size in Classes and Objects in C++

本文关键字:对象 静态 数组 C++ 设置 帮助      更新时间:2023-10-16

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

所有这些都将使用一个长度始终为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.insert()时都会崩溃

试试这个:

//book.h
class Shelf{
public:
    static const int shelfSize = 20;
    Shelf();
    void insert(int);
    int bookshelf[shelfSize];
};

(您需要从构造函数中删除bookshelf[shelfSize];行。)

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

Shelf::Shelf()
  : bookshelf()  // This initializes all elements to zero
{}

您的insert()逻辑没有多大意义;你需要记录到目前为止你插入了多少个项目,这样你就知道下一个放在哪里了。

此外,请考虑使用std::vector而不是原始C样式数组。它们避免了一些问题,例如空间不足!

bookshelf没有空间。你的定义不是由大小决定的。

//book.h
#define shelfSize 20
class Shelf{
public:
    Shelf();
    void insert(int);
    int bookshelf[shelfSize];
};

和书的使用。h

//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;
}