* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:派生类成员的访问属性的原则
* 作 者: 张传新
* 完成日期: 2012年 05月 09日
* 版 本 号:1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:请修改基类中成员的访问限定符和派生类的继承方式,考虑可能的运行结果或可能出现的错误,
用自己的话总结确定派生类成员的访问属性的原则。
* 程序输出:
* 程序头部的注释结束*/
#include<iostream>
#include<string>
using namespace std;
class Student //(1)修改student类中各数据成员和成员函数的访问限定符,并观察发生的现象
{
public:
Student(int n,string nam,char s) ;
void show();
~Student( ){ }
protected:
int num;
string name;
char sex ;
};
class Student1: public Student //(2)修改此处的继承方式,并观察发生的现象
{
public:
Student1(int n,string nam,char s,int a,string ad);
void show1( );
~Student1( ){ }
private:
int age;
string addr;
};
Student::Student(int n,string nam,char s)
{ num=n;
name=nam;
sex=s;
}
void Student::show()
{ cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
}
Student1::Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s)
{ age=a;
addr=ad;
}
void Student1::show1( )
{ cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
cout<<"age: "<<age<<endl;
cout<<"address: "<<addr<<endl;
}
int main( )
{ Student1 stud1(10010,"Wang-li",'f',19,"115 Beijing Road,Shanghai");
Student1 stud2(10011,"Zhang-fun",'m',21,"213 Shanghai Road,Beijing");
Student stud3(20010,"He-xin",'m');
stud1.show1( );
stud2.show( );
stud3.show( );
return 0;
}
测试结果:
(1)修改student类中各数据成员和成员函数的访问限定符
① 把"protected"改为"private",显示错误 'Student::num' 、'Student::name' 、'Student::sex': cannot access private member declared in class 'Student';
② 把"protected"改为"public",无错误;
(2)修改派生类的继承方式
① 把"public"改为"protected",结果是Student::show' not accessible because 'Student1' uses 'protected' to inherit from 'Student';
② 把"public"改为"private",结果是'Student::show' not accessible because 'Student1' uses 'private' to inherit from 'Student;
(3)基类中成员的访问属性原则:
①基类中的成员是私有成员时,在公用、私有、保护派生类中都不可访问;
②是公用成员时,在公用派生类中还是公用的,在私有派生类中还是私有的,在保护派生类中还是保护的;
③是保护成员时,在公用派生类中是保护的,在私有派生类中是私有的,在保护派生类中还是保护的。
(4)派生类中成员的访问属性原则:
①公用的,在派生类内部和派生类外部都可以访问;
②受保护的,在派生类内可以访问,在派生类外部不可以访问,在下一层派生类中可以访问;
③私有的,派生类内可以访问,派生类外不可以访问;
④不可访问的,在派生类内部和外部都不能访问。