分类: C/C++
2008-10-12 20:51:18
在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public
继承是最为常用的一种继承关系,代表了接口继承含义,而他们分别具体代表了什么含义呢?
1. public
从语义角度上来说,public继承是一种接口继承,根据面向对象中的关系而言就是,子类
可以代替父类完成父类接口所声明的行为,也就是必须符合“Liskov替换原则(LSP)”,
此时子类可以自动转换成为父类的接口,完成接口转换。
从语法角度上来说,public继承会保留父类中成员(包括函数和变量等)的可见性不变,
也就是说,如果父类中的某个函数是public的,那么在被子类继承后仍然是public的。
2. protected
从语义角度上来说,protected继承是一种实现继承,根据面向对象中的关系而言就是,
子类不能代替父类完成父类接口所声明的行为,也就是不符合“Liskov替换原则(LSP)”,
此时子类不能自动转换成为父类的接口,就算通过类型转换(static_cast和dynamic_cast)
也会得到一个空指针。
从语法角度上来说,protected继承会将父类中的public可见性的成员修改成为protected
可见性,相当于在子类中引入了protected成员,这样一来在子类中同样还是可以调用父
类的protected和public成员,子类的子类就也可以调用被protected继承的父类的protected
和public成员。
例如:
class CSample1 {
protected:
void printProtected() {}
public:
void printPublic() {}
};
class CSample2 : protected CSample1 {
};
class CSample3 : public CSample2 {
void print3() {
printProtected();
printPublic();
}
};
3. private