对下面的程序改用protected继承方式,其他不改。程序能否正常运行?请修改程序,使之能正常运行。
#include<iostream>
using namespace std;
class Student
{
public:
void get_value()
{
cin >> num >> name >> sex;
}
void display()
{
cout << "num:" << num << endl;
cout << "name:" << name << endl;
cout << "sex:" << sex << endl;
}
private:
int num;
string name;
char sex;
};
class Student1 :public Student
{
public:
void get_value_1()
{
cin >> age >> addr;
}
void display_1()
{
cout << "age:" << age << endl;
cout << "address:" << addr << endl;
}
private:
int age;
string addr;
};
int main()
{
Student1 stud;
stud.get_value();
stud.get_value_1();
stud.display();
stud.display_1();
return 0;
}
改为:
#include<iostream>
using namespace std;
class Student
{
public:
void get_value()
{
cin>>num>>name>>sex;
}
void display()
{
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
}
private:
int num;
string name;
char sex;
};
class Student1:protected Student//继承方式改为protected
{
public:
void get_value_1()
{
cin>>age>>addr;
}
void display_1()
{
cout<<"age:"<<age<<endl;
cout<<"address:"<<addr<<endl;
}
private:
int age;
string addr;
};
int main()
{
Student1 stud;
stud.get_value();
stud.get_value_1();
stud.display();
stud.display_1();
return 0;
}
答:不行的,因为基类的公有成员函数在保护派生类中的属性是“被保护的”,外界不能调用,而且派生类的成员函数不能引用基类的私有数据成员。
请修改程序,使之能正常运行:
#include<iostream>
using namespace std;
class Student
{
public:
void get_value()
{
cin >> num >> name >> sex;
}
void display()
{
cout << "num:" << num << endl;
cout << "name:" << name << endl;
cout << "sex:" << sex << endl;
}
private:
int num;
string name;
char sex;
};
class Student1 :protected Student
{
public:
void get_value_1()
{
get_value();
cin >> age >> addr;
}
void display_1()
{
display();
cout << "age:" << age << endl;
cout << "address:" << addr << endl;
}
private:
int age;
string addr;
};
int main()
{
Student1 stud;
stud.get_value_1();
stud.display_1();
return 0;
}