C++中继承方式与访问标号的学习笔记
1 无虚函数的情况
基类有一个public函数,一个protected函数,一个private函数:
class A {
public:
voidf() {
cout<<"A::f"<<endl;
g();
h();
}
protected:
void g() {cout<<"A::g"<<endl;}
private:
voidh() {cout<<"A::h"<<endl;}
};
1.1 第一种情况:public继承
派生类public继承基类,没有新增的函数。
class B:public A {
};
int main(int argc, char *argv[]) {
B b;
b.f();
return 0;
}
运行结果:
A::f
A::g
A::h
只覆盖public函数:
class B:public A {
public:
void f() {
cout<<"B::f"<<endl;
g();
h();
}
};
编译错误: `void A::h()' is private。
只覆盖protected和private函数:
class B:public A {
protected:
void g() {cout<<"B::g"<<endl;}
private:
voidh() {cout<<"B::h"<<endl;}
};
运行结果:
A::f
A::g
A::h
覆盖所有函数:
class B:public A {
public:
void f() {
cout<<"B::f"<<endl;
g();
h();
}
protected:
void g() {cout<<"B::g"<<endl;}
private:
voidh() {cout<<"B::h"<<endl;}
};
运行结果: