class Person{public: virtual void test(){ cout << FUNCTION << endl;}};class Student : public Person{public: virtual void test() { cout << FUNCTION << endl;}};void test_virtual(Person * p){…}test_virtual(Student()) ; //没问题吧但只在public 继承这才没问题 : Person * p = new Student现在把 public 继承修改:class Person{public: virtual void test(){ cout << FUNCTION << endl;}};class Student : protected Person{ //protected 继承public: virtual void test() { cout << FUNCTION << endl;} //内部依然可以使用virtual函数 void test_virtual(){ Person * p = this; p->test(); }};现在呢 : Person p = new Student //conversion from ‘Student ’ to ‘Person *’ exists, but is inaccessible原因: 此时父类接口都是protected, 外部已经无法访问;但virtual函数依然存在, 在内部依然可以使用;