如何使用函数更改“per.name”等类对象?原型设计是否必要?功能调用?这是通过价值还是参考传递的?
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
char* name;
int age;
double weight;
double height;
};
int main()
{
Person per;
per.name = "John"; //change per.name
cout << per.name << endl;
}
我想改名字John。这是作为副本吗?
答案 0 :(得分:1)
char* name;
允许您将非const
指针存储到某个字符或NUL终止的可变长度文本。因为它不是const
,所以C ++编译器不允许您将其指向您不允许修改的文本,例如字符串文字(您的“John”)。
你最好添加......
#include <string>
...在您的文件上,并将name
成员变量的定义更改为:
std::string name;
然后,它会将您分配的任何文本的副本存储到Person
对象实例的字段中。
(一些非常古老的C ++编译器确实允许将非const
字符指针指向字符串文字以与早期C标准兼容,并且如果使用命令行参数明确请求,当前编译器有时仍会支持任何尝试“通过”指针来修改文本通常会导致程序在运行时崩溃。如果您使用的教科书或参考资料建议将char*
指向字符串文字,那么请更好,现代参考。)