class person
{
char name[20];
float age;
public:
person(char *s,float a)
{
strcpy(name,s);
age=a;
}
};
int main()
{
person P1("John",37.50);
person p2("Ahmed",29.0);
}
因此,在此类中,参数化构造函数将字符指针作为参数,然后将其传递给strcpy函数,该函数将字符串复制到字符数组名称。 如果有一个整数数组,比如int arr [10]; 然后arr是指向第一个元素的指针。 如果有一个字符串数组,就像是一个字符串 char str [] ="你好&#34 ;; 那么str是指向第一个元素的指针,在这种情况下是h。所以我们不应该把str之类的东西传递给构造函数吗?为什么我们传递字符数组元素,比如" john", "艾哈迈德"到构造函数。 我们不应该这样做 - char str [] =" ahmed&#34 ;; person p1 =(str,23);
答案 0 :(得分:2)
将类似"John"
或"Ahmed"
的字符串文字传递给函数/方法意味着您将指针传递给它的第一个字符。
答案 1 :(得分:0)
从编译器的角度来看,
char str[];
char *str;
都被解释为char的指针。
给定函数原型person(char *s,float a)
和函数调用person("John",37.50)
(在你的情况下它是一个被调用的构造函数,但同样适用),编译器实际生成的是:
char *s = "John";
float a = 37.50;
person(s,a);
更准确地说,上面的示例代码和函数调用person("John",37.50)
应生成相同的指令。
答案 2 :(得分:0)
在这种情况下,没有真正的理由使用原始字符串。由于您声明了class
,因此您显然也不需要兼容C编程语言。因此,只需使用::std::string
,您的代码将更具可读性,并且在某些情况下由于移动语义更快(自动使用::std::string
类型)。
#include <string>
class person
{
::std::string name;
float age;
public:
person(::std::string name, float age)
: name(name)
, age(age)
{
}
};