首先,我之前只学过一点Java。自从我开始熟悉C ++以来只有几天了,所以请不要把这个问题弄得那么基本,请不要贬低我的问题。
我制作了一个简单的源代码如下:
#include <iostream>
using namespace std;
class Car {
public:
void setBrand(string name);
void setPrice(double price);
string getBrand();
double getPrice();
Car();
Car(string name);
Car(string name, double price);
private:
string name;
double price;
};
Car::Car() {
}
Car::Car(string name) {
name = name;
}
Car::Car(string name, double price) {
name = name;
price = price;
}
void Car::setBrand(string name) {
name = name;
}
void Car::setPrice(double price) {
price = price;
}
string Car::getBrand(void) {
return name;
}
double Car::getPrice(void) {
return price;
}
int main() {
Car car;
car.setBrand("Nissan");
car.setPrice(30000);
cout << "Brand: " << car.getBrand() << endl;
cout << "Price: " << car.getPrice() << endl;
return 0;
}
我想创建一个代码,用于创建一个名为Car的类的空实例,稍后设置字段值并在控制台上打印出来。
代码在编译期间没有出现任何错误,但我看到的结果与我的预期完全不同。它没有显示品牌名称,价格看起来甚至很奇怪,如下所示。
Brand:
Price: 6.95322e-310
有人帮助我!非常感谢您提前。
答案 0 :(得分:3)
您遇到的问题是您使用函数参数覆盖成员名称。您可以使用this->
使其明确或以不同方式命名成员。
例如:
void Car::setBrand(string name) {
this->name = name;
}
或者:
void Car::setBrand(string new_name) {
name = new_name;
}
答案 1 :(得分:3)
在构造函数和setter中,不区分local参数和类成员。
name = name;
函数参数和类成员都被称为name
。目前,编译器将参数值分配给自身,而根本不影响类成员。这是因为函数参数的范围更直接。
可能的解决方案:
this
:this->name = name;
。name = _name;
。对于构造函数,请使用初始化列表:
Car::Car(string name, double price)
: name(name)
, price(price)
{ }
答案 2 :(得分:3)
你的代码用散文描述它有太多错误,所以让我提出一个固定的实现,我留给你发现差异:
#include <string>
class Car
{
private:
static constexpr double kNoPrice = -1.0;
static constexpr const char* kNoName = "[no name]";
public:
// Main constructor: constructs a car with the given name and price.
Car(std::string name, double price)
: name_(std::move(name))
, price_(price)
{}
// Convenience constructors:
Car() : Car(kNoName, kNoPrice) {}
Car(std::string name) : Car(std::move(name), kNoPrice) {}
// Accessors:
const std::string& getBrand() const { return name_; }
void setBrand(std::string name) { name_ = std::move(name); }
double getPrice() const { return price_; }
void setPrice(double price) { price_ = price; }
private:
std::string name;
double price;
};
一些随机音符,没有特别的顺序:
std::string
,而不是string
,mate
或buddy
。永远不要滥用命名空间标准。price_
)。foo_
)。