成员函数中的问题
problems in member function
#include <iostream>
#include <cstring>
using namespace std;
class student {
int roll_no;
char name[56];
public:
void setdata(int roll_no_in, const char* name_in) {
roll_no = roll_no_in;
strcpy(name, name_in);
}
void outdata() {
cout << "rollno is " << roll_no << endl << "name is " << name << endl;
}
};
int main() {
student s1;
s1.setdata(12, "robin");
s1.outdata();
return 0;
}
我对这个程序有一些疑问
- 我们如何将字符串
- 存储到指针中,就像上面的程序一样将字符串 robin 存储到 char *name_in 中,因为指针仅用于存储地址。我们可以存储甚至字符串吗?
- 如果我不使用,为什么要在方法函数集数据中添加
const
然后它向我显示错误。这是可选的,对吧? - 为什么我不能在
setdata
方法函数中使用char name_in[34]
代替char *name_in
?
-
C 字符串是
char
的数组。将数组作为函数参数传递时,它会转换为指向第一个元素的指针。 -
const
修饰符表示函数不会修改name_in
的内容。由于字符串文本是常量,因此需要它来允许使用文本参数调用函数。 -
您可以。但是由于该函数实际上对它将接受的字符串的大小没有限制,因此这将具有误导性。将参数声明为具有长度的数组就像将其声明为指针一样;指定的长度将被忽略。注意:这仅适用于第一个维度;传递多维数组时,可以省略第一维的长度,但需要指定所有其他维度。
我们如何将字符串存储到指针中,就像上面的程序一样将字符串 johnson 存储到
char *name_in
中,因为指针仅用于存储地址。
你不是把它存储在name_in
中,而是把它存储到name
,这是一个数组。 name_in
是指向传递给函数的数组的指针;数组在传递给函数时会自动转换为指针。(更一般地说,指针可以指向数组的开头,并用于访问数组;像strcpy
这样的 C 样式函数正是这样做的。
在惯用C++中,您将使用一个类,而不是使用指针和数组的危险混乱:
std::string name;
name = name_in;
如果我不使用它,为什么我要在方法函数集数据中添加 const,那么它就会向我显示错误。
我假设你的意思是const char * name_in
.您正在传递指向字符串文本的指针,该文本是常量;并且该语言不允许您将非常量指针指向常量对象。
这是可选的,对吧?
在C++11之前,它是可选的;把它排除在外只是一个非常糟糕的主意。现在这是强制性的。
为什么我不能在 setdata 方法函数中使用
char name_in[34]
代替char *name_in
你可以;作为一个函数参数,两者都是等价的。同样,您需要const
才能传递字符串文本或其他常量字符串。不过,这有点误导,暗示name_in
是一个特定大小的数组,而两者都不能保证。
同样,这是C++,因此几乎可以肯定std::string
比任何一个都更好的选择。
*我们如何像上面的程序一样将字符串 johnson 存储到字符name_in中,因为指针仅用于存储地址。我们可以存储甚至字符串吗?
您实际上是在存储指向字符串基址的指针。可以使用此指针遍历整个字符串。
如果我不使用它,为什么我应该在方法函数集数据中添加常量,那么它就会向我显示错误
"Ravi"是一个字符串文字,存储在只读内存中。因此,如果您尝试将此文本传递给接受char *
的函数,那将是违反编译器试图建立的约束。
*为什么我不能在 setdata 方法函数中使用 char name_in[34] 代替 char name_in?
您正在将指向 char 的指针传递给此函数,因此您必须使用指向 char 的指针来接受它。然而,数组 ,当作为参数传递给函数时,会衰减到指针。
- Visual Studio中的函数声明和函数定义问题
- C++quit()函数中可能存在作用域问题
- 类似于strcat()的函数出现问题
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 类C++中的函数问题(LNK2019和LNK1120错误)
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 关于简单C++函数(is_palindrome)的逻辑的问题
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- constexpr构造函数需要常量成员函数时出现问题
- 添加存储在向量中的大整数的函数出现问题
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 关于 c++ 函数中指针赋值的简单问题
- 如何在标头中声明(或定义)函数的问题
- 有关 c++ 构造函数的问题
- 模板类转换问题 - 无法推断调用的函数
- 从 C++ 中的函数返回数组地址问题
- 关于复制构造函数的一个棘手问题
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题