c ++从另一个类语法访问类字段
Posted
技术标签:
【中文标题】c ++从另一个类语法访问类字段【英文标题】:c++ Access class field from another class syntax 【发布时间】:2016-11-12 23:21:11 【问题描述】:我有两节课
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<<
我很确定唯一的问题是最后一行的语法,你能指导我如何纠正它吗? 提前感谢
【问题讨论】:
books[i]
是什么类型?你如何取消引用其中之一?不要用下划线开始你的标识符;这些名称是保留的。
我的老师要求它是下划线,books 是二维数组,所以我想如果我把索引放在这本书本身,但这是我的代码中的问题,所以我不知道是什么是语法...
__bookCount
是个坏主意。 What are the rules about using an underscore in a C++ identifier?
【参考方案1】:
那里有多个错误。
_name
成员中的无意义 *
_booksCount 错字
方法 getAvg
中缺少返回值
Shelf
类中缺少方法 getAvg
的声明
最后,主要错误是,您有成员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
)而不是 Books
中的数组 Shelf
vector<Book> _books;
因为如果你使用*和new(或malloc)进行初始化,你的对象不是分配在Stack上,而是在Heap上,所以你应该用delete(或free)删除它,否则会导致内存泄漏。
【讨论】:
【参考方案2】:我想你想这样做:
#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++ 添加 --std=c++11 希望这会有所帮助
【讨论】:
【参考方案3】:四个问题:
-
您在 for 循环中的名称
__bookCount
中有错字:应该是 _bookCount
(一个“_”而不是两个)
只要小于 _bookCount - 1
,您就增加了 i
:您应该将其更改为小于或等号,或者只输入 _bookCount
。
您的代码中没有 return
语句。
你有一个指向_books
的双指针,所以_books[i]
不是一个对象实例,它是一个Book
类对象的一个指针。您应该改用_books[i]->_pages
,或(*_books[i])._pages
【讨论】:
以上是关于c ++从另一个类语法访问类字段的主要内容,如果未能解决你的问题,请参考以下文章