C++ - 无法从基类继承 |提供空值
C++ - Unable to inherit from base class | Gives empty values
我想我在下面的代码中做错了什么。我想继承类员工中类人的方法。
#include<bits/stdc++.h>
using namespace std;
class Person{
private:
string name;
int age;
public:
Person(string name, int age){ //Base parameterized constructor
name = name;
age = age;
}
void getName(){
cout<<"Name: "<<name<<endl;
}
void getAge(){
cout<<"Age: "<<age<<endl;
}
};
class Employee: public Person{ //Default inheritance type is private
private:
int employeeID;
public:
Employee(string name, int age, int id) : Person(name, age){ //Derived parameterized constructor
employeeID = id;
}
void getEmployeeDetails(){
getName();
getAge();
cout<<"Employee ID: "<<employeeID<<endl;
}
};
int main(){
Employee* e = new Employee("John", 24, 14298);
e->getEmployeeDetails();
return 0;
}
我得到以下输出:
名字:
年龄: 0
员工编号: 14298
请让我知道我在这里错过了什么。任何帮助将不胜感激!
问题不在于继承,而在于Person
从不初始化其任何字段的事实。
此代码:
Person(string name, int age){ //Base parameterized constructor
name = name;
age = age;
}
将局部变量name
赋给自身,并与age
相同,因为参数隐藏类成员名。同名的成员对象永远不会初始化。
三种可能的解决方案(按我更喜欢的主观顺序列出(:
使用成员初始值设定项列表初始化成员:
Person(string name, int age) : name{name}, age{age} { }
使用不同的名称
Person(string providedName, int providedAge) { name = providedName; age = providedAge; }
使用
this
消除对象的歧义Person(string name, int age){ //Base parameterized constructor this->name = name; this->age = age; }
与继承无关,无论如何代码都是错误的。
这
Person(string name, int age){ //Base parameterized constructor
name = name;
age = age;
}
应该是这个
Person(string n, int a){
name = n;
age = a;
}
由于构造函数参数声明名称与成员变量相同,因此成员变量是隐藏的,您只是将参数分配给它们自己。
编写相同代码的更好方法是使用初始化器列表
Person(string name, int age) : name(name), age(age)
}
初始化器列表有几个优点,其中之一是没有歧义,您可以使参数名称与成员变量名称相同。另一个(更重要的(是,一般来说,初始化比赋值更有效。
相关文章:
- 使用 const char* 键映射 C++ 检索空值
- 返回空值的字符串值
- boost::any 如何检查空值/未定义的值
- C++ - 无法从基类继承 |提供空值
- C++空值和此指针
- 使用 cin 或 getline() 输入空值
- 可变参数列表是否以空值终止?
- 如何将整数重新初始化/设置为空值
- 检查构造函数的空值
- 无法从Linux,C ++执行"my_script" python脚本"main(filename)"功能;pModule = PyImport_Import(pName);返回空值
- 使用Nlohmann JSON将JSON数据保存在文件中时获取空值
- 在命名空间中定义变量,但在测试中获取空值
- 将 CURL 转换为字符串时为空值
- QCharts - 在 QLineSeries 中创建一个中断(空值)
- 动态强制转换返回空值
- SDL 表面返回空值
- ptrA = ptrB 是否等同于 ptrA = &*ptrB?,空值是否共享一个地址空间?
- 如何将 libpq 中的空值与C++绑定
- 尝试访问 json dataC++ 时获取空值
- boost::p rogram_options 解析命令行始终为空值