C .更改对象数据成员的数据成员
C++. Change data member of an Object data member
这是我要说明的简单代码。有一本书在班上有一个作者作为数据成员。我想从测试程序中修改作者的邮件,但是cppbook.getauthor()。setemail(" ...")不起作用。我尝试通过引用传递。我找到了一种选择,但不满意。一定是一个简单的答案,我想我想念一些东西。
class Author {
private:
string name;
string email;
public:
Author(string name, string email) {
this->name = name;
this->email = email;
}
string getName() {
return name;
}
string getEmail() {
return email;
}
void setEmail(string email) {
this->email = email;
}
void print() {
cout << name << "-" << email << endl;
}
};
class Book {
private:
string name;
Author author; // data member author is an instance of class Author
public:
Book(string name, Author author)
: name(name), author(author) {
}
string getName() {
return name;
}
Author getAuthor() {
return author;
}
void print() {
cout << name << " - " << author.getEmail() << endl;
}
void setAuthorMail(string mail) {
author.setEmail(mail);
}
};
int main() {
Author john("John", "john@gmail.com");
john.print(); // John-john@gmail.com
Book cppbook("C++ Introduction", john);
cppbook.print();
cppbook.getAuthor().setEmail("peter@gmail.com");
cppbook.print(); //mail doesn't change: C++ Introduction - john@gmail.com
cppbook.setAuthorMail("andrew@gmail.com");
cppbook.print(); //mail changes: C++ Introduction - andrew@gmail.com
}
实时示例
我想从测试程序中修改作者的邮件,但
cppbook.getAuthor().setEmail("...")
不起作用。
Author getAuthor();
如果要更改与Book
关联的内部对象,则应为Author& getAuthor();
。
否则,您只是更改该Author
实例的临时副本。
您是按值返回对象,而不是通过引用。这意味着,您获得了作者的 copy ,但您没有修改存储在书类中的一个。
您应该修改
中的签名Author& Book::getAuthor();
要更改对象作者有效
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 访问数据成员(本身是对象)的数据成员,就好像它们是类成员一样
- 有没有办法在C++中循环访问对象的不同数据成员
- "Class1"类"Class2"对象作为私有数据成员。如何通过"Class 2"函数引用"Class1"对象?
- 如何使用数据成员填充派生类的对象到基类的指针数组中
- 如何在C++中使用类对象访问指针数据成员
- C++中的常量对象或私有/常量数据成员(变量)?
- 指向未由对象地址初始化的对象的指针如何将值分配给类的数据成员
- 通过向量中的对象的数据成员迭代
- 继承的类对象如何使用私有数据成员
- 我如何在参考上使用数据成员而不使用新关键字创建对象
- 从R中访问C 对象数据成员
- 静态数据成员是否在所有类对象之前初始化?
- 通过指向对象数据成员的指针更改该对象的值
- 派生类没有额外的数据成员;将基对象静态向下转换为派生对象是否安全
- 只有当声明一个对象时,内存空间才会分配给类的数据成员,那么为什么 Sizeof(class_name) 给我结果
- 如何在 c++ 中从对象数组中获取数据成员数组
- 创建带或不带指针的数据成员对象
- 省略数据成员对象的初始值设定项列表条目