C++学習のメンバー関数のアクセス属性と継承属性が虚表構築に与える影響--個人的理解
1351 ワード
C++学習の虚関数--虚関数の表解を深く理解した後、虚表の構築は虚関数のベースクラスでのアクセス属性、継承属性、サブクラスでのアクセス属性とは関係ないと感じた.
いずれにしても27種類の場合、自分で試してみることができます.
出力:
in derived1 in derived2 in derived3
いずれにしても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