沒有編譯錯誤,但輸出是這樣的:
g class.cpp && ./a.out
是 -1003073000 歲。
它不會按應有的方式輸出字串和 int。
我不知道怎么回事,如果有人指出我的錯誤,我將不勝感激,謝謝!
這是代碼:
#include<iostream>
class Student{
private:
std::string name;
int age;
public:
Student(std::string name, int age){
name = name;
age = age;
}
void setName(std::string name){
name = name;
}
std::string getName(){
return name;
}
void setAge(int age){
age = age;
}
int getAge(){
return age;
}
};
int main(){
Student student1 = Student("Clayton",20);
std::cout<<student1.getName();<<" is "<< student1.getAge()<<" years old."<<std::endl;
}
uj5u.com熱心網友回復:
在建構式中
Student(std::string name, int age){
name = name;
age = age;
}
名稱name和age是這些名稱的引數變數。這意味著您將變數分配給自己。
這將使Student::name成員默認構造并為空,但Student::age變數將未初始化,并且具有不確定的值,并且使用這些值(甚至列印它們)是未定義的行為。
你有兩個解決方案:
用于
this顯式參考當前物件并使用其成員變數:Student(std::string name, int age){ this->name = name; this->age = age; }或者使用成員初始化器串列來初始化(而不是分配給)成員變數:
Student(std::string name, int age) : name(name), age(age) { // Empty }為此,語言知道成員變數和引數變數之間的區別。
我強烈推薦第二種選擇。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/421221.html
標籤:
