定义一个类:
class Text1{
public:
Text1(); //构造函数
Text1(int pub, int pri, int pro); //重载的构造函数
~Text1();
int pub;
void OutputValue(); //打印类内变量
private:
int pri;
protected:
int pro;
};
其中重载的构造函数参数与类中已有参数重复,无法在构造函数中对pub,pri,pro初始化。
如果构造函数对内部变量初始化:
Text1::Text1(int pub, int pri, int pro) {
pub = 10;
pri = 20;
pro = 30;
}
或
Text1::Text1(int pub, int pri, int pro) {
pub = pub;
pri = pri;
pro = pro;
}
当构造函数被执行时,赋值语句使用的为函数参数,而非类内变量。
此时,当我实例化这个类时:
int main() {
Text1 A(10, 20, 30);
A.OutputValue();
return 0;
}
输出为:
pub = -858993460
pri = -858993460
pro = -858993460
类内三个变量仍为随机值。
这么写没有语法错误,因此不会报错,但不留意可能导致不能成功初始化,给后续debug增加困难。
正确写法应加上作用域:
Text1::Text1(int pub, int pri, int pro) {
Text1::pub = pub;
Text1::pri = pri;
Text1::pro = pro;
}
或者使用this指针:
Text1::Text1(int pub, int pri, int pro) {
this->pub = pub;
this->pri = pri;
this->pro = pro;
}
此时,再实例化这个类时,输出为:
pub = 10
pri = 20
pro = 30