关于继承

来源:互联网 发布:js for循环给数组赋值 编辑:程序博客网 时间:2024/06/05 08:59

1、静态方法(属于整个类)
特点:成员属于某个类。对其他成员访问仍可以通过public、protected或private保留字来控制。
创建:声明前加保留字static,分配内存(在类声明的外部写出静态属性的类型和名字就行了)。

*特别:
1)静态成员是在所有对象之间共享的,不能在静态方法里访问非静态元素
2)
class Pet{public:   static int getCount();private:   static int count;}

int Pet::getCount(){   return count;}

getCount()方法只有一个用途:返回宠物计数器的当前值。这必须用一个方法完成——count属性是一个private成员,只有Pet类里的方法才能访问它。
把一个private属性和一个public方法相搭配的办法可以得到这样一种访问控制效果:任何代码都可以读取该属性的值,但对该属性的写操作只能通过拥有该属性的类来进行。

2、虚方法

*特别:

1)析构器都是虚方法。从编译器的角度看,它们只是普通的方法。如果它们不是虚方法,编译器会根据它们在编译时的类型而调用那个在基类里定义的版本(基类的构造器)。会导致内存泄漏。

2)在实现一个多层次类继承关系的时候。最顶级的基类应该只有虚方法。

3)静态方法不可能是虚方法,虚方法也不可能是静态方法。


3、抽象方法

在告诉编译器:这个方法不可缺少,但在基类里还不能为它提供一个实现。换句话说,要想使用某个抽象方法,就必须在子类里实现它。

如果在某个类里有一个抽象方法,那它必须至少还有一个普通的虚方法才行



4、多继承:

class TeachingStudent : public Student, public Teacher {}

5、虚继承

TeachingStudent类继承自Teacher和Student两个类,因而季承了两组Person类的属性,一组来自Student,另一组来自Teacher。

在告诉编译器:从当前这个类在派生出来的子类只能拥有那个基类的一个实例

class Teacher : virtual public Person{}

让Student和Teacher类都徐济成自Person类,编译器将确保从Student和Teacher类再派生出来的每一个子类只能拥有一份Person类的属性

在使用多继承的时候,最安全和最简明的做法是只从没有任何属性且只有抽象方法的类开始继承。这可以让你远离某个后代子类可能拥有好几个基类树形的问题,这样的类又叫做接口。




0 0
原创粉丝点击