#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
 class Student
{public:
   void display()
   {cout<<"num:"<<num<<endl;
   cout<<"name:"<<name<<endl;
   cout<<"sex:"<<sex<<endl;}
protected:
int num;
string name;
char sex;
};
class Student1:protected Student
{public:
   void display1()
   {cout<<"num:"<<num<<endl;
   cout<<"name:"<<name<<endl;
   cout<<"sex:"<<sex<<endl;
   cout<<"age:"<<age<<endl;
   cout<<"address:"<<addr<<endl;}
private:
int age;
string addr;
};
int main()
{Student1 stud1;
stud1.display1();
stud1.num=10023;
 return 0;
}

解决方案 »

  1.   

    stud1.num=10023; //num是Student类的protected成员,不能直接使用对象访问,
    要想用子类的对象访问必须把Student类的num改为public成员,Student1的继承方式也改为public
      

  2.   

    子类是可以访问基类的保护成员,而且必须是以子类的方式访问,如果子类的一个函数有个父类指针做形参,那么在函数里是不能用这个父类指针去访问父类的proctect成员,不过这跟你所碰到的无关。
    stud1.num=10023;
    外部是不能访问类的protect和private成员的。
      

  3.   

    stud1.num=10023;
    外部是不能访问类的protect和private成员的。
    这是什么意思?
      

  4.   

    暂时理解为使用类对象访问
    protect和private成员要使用类的成员函数去访问,如果把num定义为protected,通常就要给Student定义两个public型的成员函数来访问它,一个赋值,一个取值
    void Student::SetNum(int iVal)
    {
        num = iVal;
    }
    int Student::GetNum()
    {
        return num;
    }
    这样stud1.num=10023;就要改为stud1.SetNum(10023);同时继承方式也必须改为public,