在C++学习之深入理解虚函数--虚函数表解之后,我感觉虚表的构建跟虚函数在基类中的访问属性、继承属性、在子类中的访问属性都没关系。
反正也就27种情况,自己可以试下:如下面
#include<iostream>
#include<cstdlib>
class parent1 {
public:
virtual void print(){
std::cout<<"in parent1"<<std::endl;
}
};
class derived1 :public parent1{
private:
virtual void print(){
std::cout<<"in derived1"<<std::endl;
}
};
class parent2 {
private:
friend void parFriend2(parent2*p);
virtual void print(){
std::cout<<"in parent2"<<std::endl;
}
};
void parFriend2(parent2*p){
p->print();
}
class derived2:protected parent2{
private:
virtual void print(){
std::cout<<"in derived2"<<std::endl;
}
};
class parent3 {
private:
friend void parFriend3(parent3*p){
p->print();
}
virtual void print(){
std::cout<<"in parent3"<<std::endl;
}
};
void parFriend3(parent3*);
class derived3 :private parent3{
protected:
virtual void print(){
std::cout<<"in derived3"<<std::endl;
}
};
int main(int argc,char** argv){
parent1* p1=new derived1;
p1->print();
parent2* p2=(parent2*)new derived2;
parFriend2(p2);
parent3* p3=(parent3*)new derived3;
parFriend3(p3);
return EXIT_SUCCESS;
}
输出:
in derived1
in derived2
in derived3