我有2个班级
class Book
{
public:
int _pages;
string* _name;
};
class Shelf
{
public:
int shelfName;
int _booksCount;
book** _books;
};
(更多不相关的函数和变量)
我想创建一个函数,它将计算货架上的总页数,我是新的OOP,以便我尝试做的事情:
double Shelf:: getAvg()
{
int sum, i;
for (int i = 0; i < __bookCount-1; i++)// the count not considering inedx 0
{
sum += _books[i]._pages;// need to be fixed<<
}
}
我很确定唯一的问题是最后一行语法,你能指导我如何纠正它吗? 提前谢谢
答案 0 :(得分:0)
四个问题:
__bookCount
的拼写错误:它应该是_bookCount
(一个'_'而不是两个)i
小于_bookCount - 1
,就会增加_bookCount
:您应该将其更改为小于或等于符号,或仅将return
放在那里。_books
语句。_books[i]
的双指针,所以Book
不是一个对象实例,它是一个指针,用于类_books[i]->_pages
的对象。您应该使用(*_books[i])._pages
代替{{1}} 答案 1 :(得分:0)
那里有多个错误。
_name
成员getAvg
getAvg
class Shelf
的声明
Book** _books
这是指针的指针,但如果它只是指针你就可以访问它。您应该仅将_books
声明为Book* _books
。您的代码应该(可以)看起来像:
class Book {
public:
int _pages;
string _name;
};
class Shelf {
public:
int shelfName;
int _booksCount;
Book* _books;
double getAvg();
};
double Shelf::getAvg()
{
int sum, i;
for (int i = 0; i < _booksCount; i++)
{
sum += _books[i]._pages;
}
return sum / _booksCount;
}
我希望,这有助于:)
想法:您可以在vector
Books
)而不是Shelf
的数组
vector<Book> _books;
因为如果你使用*和new(或malloc)进行初始化,你的对象不会在堆栈上分配,而是在堆上,所以你应该用delete(或free)删除它,否则会导致内存泄漏。
答案 2 :(得分:0)
我想你想这样做:
#include <vector>
#include <string>
#include <iostream>
#include <memory>
class Book
{
public:
int _pages;
std::string* _name;
Book(const char* nameArg, size_t pagesArg): _name(new std::string(nameArg)), _pages(pagesArg) {}
~Book() { delete name;}
};
class Shelf
{
std::string shelfName;
std::vector<std::unique_ptr<Book>> _books;
public:
Shelf(const char* nameArg): shelfName(nameArg) {
}
void addBook(const char* bookNameArg, size_t pagesArg) {
_books.push_back(std::unique_ptr<Book>(new Book(bookNameArg, pagesArg)));
}
size_t getNoPagesOnShelf() const {
size_t pagesCount = 0;
for( int tmp = 0; tmp < _books.size(); ++tmp) {
pagesCount += _books[tmp]->_pages;
}
return pagesCount;
}
};
int main() {
Shelf shelf("Number 1");
shelf.addBook("Book1", 500);
shelf.addBook("Book1", 20);
shelf.addBook("Book1", 300);
std::cout << "Total number of pages in shelf is : " << shelf.getNoPagesOnShelf() << std::endl;
}
使用c ++ 11标志编译,如果您使用的是g ++ add --std = c ++ 11 希望这有帮助