C++ 使用函数c+更改类对象+;

C++ 使用函数c+更改类对象+;,c++,function,class,object,C++,Function,Class,Object,如何使用函数更改类对象,例如“per.name”?原型设计有必要吗?函数调用?这是通过值还是引用传递的 #include <iostream> #include <string> using namespace std; class Person { public: char* name; int age; double weight; double height; }; int main() { Per

如何使用函数更改类对象,例如“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;
 }
#包括
#包括
使用名称空间std;
班主任{
公众:
字符*名称;
智力年龄;
双倍重量;
双高;
};
int main()
{ 
每人;
per.name=“John”//更改per.name

CUT< P> <代码> char * name;< /Cord>允许您存储非字符代码> const <代码>指针,指向某个字符,或NUL终止的可变长度文本。因为它不是非代码> const < /C> >,C++编译器不会允许您指向不允许修改的文本,例如字符串文字(您的“约翰”)。 你最好加上

#include <string>
然后,它将存储您分配到
Person
对象实例中的字段中的任何文本的副本


<有些>(一些非常古老的C++编译器允许非-Cord>const < /Cord>字符指针)指向字符串文字,以兼容早期C标准,而当前编译器有时仍然支持如果使用命令行参数显式请求,则尝试“写入”。修改文本的指针通常会导致程序在运行时崩溃。如果您使用的教科书或参考资料建议将
char*
指向字符串文字,请使用更好的现代参考。)

1。
per.name=“John”使用在C++中不再支持的旧转换。不能将字符串文字分配给非const <代码> char */COD> 2。将新地址分配给<代码>名称<代码>将不会复制它现在指向的字符串的内容。@弗兰Cou.OISANDUREX:“旧转换”是什么意思?在这种情况下,是与< C++ >代码> char *< /COD>?@ TADMAN <代码> char *s=“HALO”;< /COD>允许使用,即使<代码>“HALO”<代码>是代码> const 和 *s=‘w’;是ub。在某个点C++取消了,需要正确的类型<代码> const char *=“HALO”。
这使得
*s='W';
无法编译。@tadman分配
常量字符[]过去是合法的
的地址到一个
字符*
。这在c++03中被弃用,在c++11中被删除。@nwp是的,这是有道理的。出于某种原因,我在考虑其他类型的转换,可能是因为花太多时间在生锈和雨燕上。
std::string name;