我有这个家庭作业,现在给我带来很多麻烦。我的老师在课堂上很模糊,很难与之沟通。我会非常努力地在这里表达我的想法。 这是作业:
(3pts)给定以下类头文件,编写类的源代码 列出的每个访问器和增变器函数的代码。 (工资 注意功能如何列出他们的参数,各不相同 在通过引用和价值传递之间。)不要忘记评论 你的代码 - 它很重要!
class Album { private: char * artist; // band or singer’s name char * title; // title of the album int year_released; // year the album is released char * record_label; // name of company produced album int num_songs; // number of songs on the album int num_minutes_long; // length (mins) of album char * genre; // genre of artist (eg, rock, pop, …) public: //constructors Album(); Album(char *& a, char *& t); //deconstructor ~Album(); //accessors and mutators bool set_artist(char * a); bool set_title(char * t); bool set_year_released(int value); bool set_record_label(char *& label); bool set_num_songs(int value); bool set_num_minutes_long(int value); bool set_genre(char * g); bool get_artist(char *& a); bool get_title(char *& t); int get_year_released(); bool get_record_label(char *& label); int get_num_songs(); int get_num_minutes_long(); bool get_genre(char *& g); };
到目前为止,这是我的工作:
bool Album::set_artist(char * a)
{
*artist = a;
}
bool Album::set_title(char * t)
{
*title = t;
}
bool Album::set_year_released(int value)
{
year_released = value;
}
bool Album::set_record_label (char *& label)
{
*record_label = label;
}
bool Album::set_num_songs(int value)
{
num_songs = value;
}
bool Album::set_number_minutes_long(int value)
{
num_minutes_long = value;
}
bool Album::set_genre(char * g)
{
*genre = g;
}
bool Album::get_artist(char *& a)
{
return artist;
}
bool Album::get_title(char *& t)
{
return title;
}
int Album::get_year_released()
{
return year_released;
}
bool Album::get_record_label(char *& label)
{
return *record_label;
}
输入将是一个数组。
我的问题:
首先,我是在正确的轨道上吗?
例如,对函数使用(char * a)
时,这是传递a
的地址,对吗?那么*artist=a;
会更改a
的地址指向的内容吗?
此外,当我期望无效时,功能是bool。为什么呢?
对于所有set_xxx
函数,参数为*
...但对于set_record_label,它为*&
。这对我来说似乎是个错误。是吗?
*&
和*
之间的区别是什么?
感谢您的时间。我知道这里有很多。
答案 0 :(得分:0)
首先,我是否走在正确的轨道上?
有点笼统,让我们详细介绍一下。但至少,你没有提供所需的评论。
当使用(char * a)函数时,例如,这是传递a的地址,正确吗?
没有。它传递一个名为a
的地址。
所以* artist = a;改变点的地址是什么?
这会产生类型不匹配。 artist
是指向char
的指针。 *artist
变量为char
变量artist
。 a
是agian,指向char
的指针。因此,您指定一个指向char
变量=>的指针类型不匹配。
此外,当我期望无效时,这些功能是bool。为什么?
我不知道你为什么期待void
。但是,bool
是有道理的:它允许函数报告操作(带副作用!)是否成功。
对于所有set_xxx函数,参数为*
...但是对于
set_record_label它是*&。这对我来说似乎是个错误。是
那对吗?
由于您的教练强调使用不同的参数,因此可能没有错误。然而,在现实生活中,这将是一种糟糕的风格。
*&和*之间有什么区别?和*作为参数?
*
描述了一个指针,&
一个引用。引用的值可以是指针。我建议您重新阅读教科书中关于类型的部分。