C++ 在C+中传递字符+;带指针
我对指针和函数传递的字符图像不清楚。请任何人都告诉我我哪里做错了,并简要介绍一下指针的概念?例如:我应该在哪里使用它们,等等C++ 在C+中传递字符+;带指针,c++,oop,pointers,C++,Oop,Pointers,我对指针和函数传递的字符图像不清楚。请任何人都告诉我我哪里做错了,并简要介绍一下指针的概念?例如:我应该在哪里使用它们,等等 #include <iostream> using namespace std; class book{ private: char *CName; int CFee; int NoPeople; int Income; public: void setData(char &x,int y,int z){
#include <iostream>
using namespace std;
class book{
private:
char *CName;
int CFee;
int NoPeople;
int Income;
public:
void setData(char &x,int y,int z){
CName = &x;
CFee = y;
NoPeople = z;
}
void calIncome(){
Income = CFee * NoPeople;
}
void viewIncome(){
cout<<Income;
cout<<CName;
}
};
int main(){
book b1;
b1.setData('DISE',20000,30);
b1.calIncome();
b1.viewIncome();
}
#包括
使用名称空间std;
课堂用书{
私人:
char*CName;
国际CFee;
int NoPeople;
国际贸易收入;
公众:
void setData(字符和x、整数y、整数z){
CName=&x;
CFee=y;
NoPeople=z;
}
void calIncome(){
收入=CFee*NoPeople;
}
无效收入(){
库特
char仅为一个char,如'D'
,如果有多个char,即string,则需要将其作为“DISE”
使用方法签名,void setData(char&x,int y,int z)
您只能传递char。这是一个字符。您应该将setData()声明更改为void setData(const char*x,int y,int z)
当您当前执行此操作时,您希望引用单个char
作为参数,该参数不能用于指定指向字符数组的char*
指针
此外,您没有在调用中指定字符数组文字:
b1.setData('DISE',20000,30);
需要改成
b1.setData("DISE",20000,30);
// ^ ^
在代码中不需要指针。应该使用std::string
:
#include <string>
...
string CName
...
void setData(const string& x,int y,int z){
CName = x;
#包括
...
字符串CName
...
void setData(常量字符串&x,整数y,整数z){
CName=x;
在setData
调用中,您应该使用双引号(用于字符串)而不是单引号(用于单个字符)。setData
metod在这里完全没有用处。它的工作应该由构造函数完成,name
变量(不应命名为CName
的应为std::string
viewIncome
应自动调用calIncome
并可能引入脏标志。否则calIncome
应为自由/静态函数,且应删除income
成员。函数参数也应该有合理的标题
我甚至会回答这个问题:
class Book {
std::string name;
int fee;
int noPeople;
int income;
public:
Book(std::string name, int fee, int noPeople) :
name(std::move(name)),
fee(fee),
noPeople(noPeople)
{
}
void calIncome() {
income = fee * noPeople;
}
void viewIncome() {
calIncome();
std:: cout << income << name;
}
};
int main() {
Book b1 ("DISE", 20000, 30);
b1.viewIncome();
}
教材{
std::字符串名;
国际手续费;
int noPeople;
国际贸易收入;
公众:
图书(标准::字符串名称、整数费、整数人):
名称(标准::移动(名称)),
费(费),,
没有人(没有人)
{
}
void calIncome(){
收入=费用*没有人;
}
无效收入(){
calIncome();
std::coutπάνταῥεῖ 答案是正确的,不管怎样,因为你使用C++而不是C,我强烈建议你使用包含SDT类:String的标准库,它简化了与CARS TutalyHy的工作,我这样做了。但是我又得到了一个错误。/当然是代码>指针。还要注意的是,你需要提供一个数组分配并从参数中复制来保持类内部指针,然后声明一个const
通常是没有意义的。修复了答案…嗨,谢谢。但是我没有得到输出。这与Xcode有关。如果你只想t是存储字符串,按值传递,然后移动到成员中。谢谢Bartek。我们的讲师总是使用char。以前从未使用过字符串。现在我也可以考虑使用字符串(开箱即用)谢谢Hanks。我知道了
class Book {
std::string name;
int fee;
int noPeople;
int income;
public:
Book(std::string name, int fee, int noPeople) :
name(std::move(name)),
fee(fee),
noPeople(noPeople)
{
}
void calIncome() {
income = fee * noPeople;
}
void viewIncome() {
calIncome();
std:: cout << income << name;
}
};
int main() {
Book b1 ("DISE", 20000, 30);
b1.viewIncome();
}