从另一个类中访问类字段的语法

c++ Access class field from another class syntax

本文关键字:语法 字段 另一个 访问      更新时间:2023-10-16

我有两个类

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

我很确定唯一的问题是最后一行语法,你能指导我如何纠正它吗?提前致谢

这里有多个错误。

  • _name成员中的无意义*
  • 错误_booksCount
  • 方法getAvg中缺少返回
  • ShelfgetAvg方法缺少申报
  • 最后,主要的错误是,你有成员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;
}

我希望,它帮助:)

想法:你可以使用一些stl容器(例如vector)代替数组BooksShelf

vector<Book> _books;

因为如果你使用*和new(或malloc)进行初始化,你的对象不是在Stack上分配的,而是在Heap上分配的,所以你应该用delete(或free)删除它,否则会导致内存泄漏。

我认为你想这样做:

#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标志编译,如果你使用的是c++,添加——std=c++11希望对大家有所帮助

四个问题:

  1. 你在for循环中有一个名称__bookCount的错字:它应该是_bookCount(一个'_'而不是两个)
  2. 你增加i,只要它小于_bookCount - 1:你应该把它改为小于或等于号,或者只放_bookCount
  3. 你的代码中没有return语句
  4. 你有双指针指向_books,所以_books[i]不是一个对象实例,它是一个指针Book的对象。你应该使用_books[i]->_pages,或者(*_books[i])._pages