文章目录
- 1.C++中类成员的访问权限和继承权限问题
- 2.多继承的优缺点
- 3. 继承机制中对象之间如何转换
- 4.组合与继承优缺点
1.C++中类成员的访问权限和继承权限问题
- 三种访问权限
public:用该关键字修饰的成员表示公有成员,
该成员不仅可以在类内可以被访问,在类外也是可以被访问的,是类对外提供的可访问接口;private:用该关键字修饰的成员表示私有成员,
该成员仅在类内可以被访问,在类体外是隐藏状态;protected:用该关键字修饰的成员表示保护成员,
保护成员在类体外同样是隐藏状态,但是对于该类的派生类来说,相当于公有成员,在派生类中可以被访问。
- 三种继承方式
若继承方式是public,基类成员在派生类中的访问权限保持不变,
也就是说,基类中的成员访问权限,在派生类中仍然保持原来的访问权限;若继承方式是private,基类所有成员在派生类中的访问权限都会变为私有(private)权限;若继承方式是protected,基类的共有成员和保护成员在派生类中的访问权限都会变为保护(protected)权限,
私有成员在派生类中的访问权限仍然是私有(private)权限。
2.多继承的优缺点
-
C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。
-
多重继承的优点很明显,就是对象可以调用多个基类中的接口;
-
如果派生类所继承的多个基类有相同的基类,而派生类对象需要调用这个祖先类的接口方法,就会容易出现二义性
-
加上全局符确定调用哪一份拷贝。比如pa.Author::eat()调用属于Author的拷贝。
-
使用虚拟继承,使得多重继承类Programmer_Author只拥有Person类的一份拷贝。
3. 继承机制中对象之间如何转换
-
向上类型转换
将派生类指针或引用转换为基类的指针或引用被称为向上类型转换,向上类型转换会自动进行,而且向上类型转换是安全的。
-
向下类型转换
将基类指针或引用转换为派生类指针或引用被称为向下类型转换,向下类型转换不会自动进行,因为一个基类对应几个派生类,所以向下类型转换时不知道对应哪个派生类,所以在向下类型转换时必须加动态类型识别技术。RTTI技术,用dynamic_cast进行向下类型转换。
4.组合与继承优缺点
- 继承
继承是Is a 的关系,比如说Student继承Person,则说明Student is a Person。继承的优点是子类可以重写父类的方法来方便地实现对父类的扩展。
继承的缺点有以下几点:
①:父类的内部细节对子类是可见的。
②:子类从父类继承的方法在编译时就确定下来了,所以无法在运行期间改变从父类继承的方法的行为。
③:如果对父类的方法做了修改的话(比如增加了一个参数),则子类的方法必须做出相应的修改。所以说子类与父类是一种高耦合,违背了面向对象思想。
- 组合
组合也就是设计类的时候把要组合的类的对象加入到该类中作为自己的成员变量。
组合的优点:
①:当前对象只能通过所包含的那个对象去调用其方法,所以所包含的对象的内部细节对当前对象时不可见的。
②:当前对象与包含的对象是一个低耦合关系,如果修改包含对象的类中代码不需要修改当前对象类的代码。
③:当前对象可以在运行时动态的绑定所包含的对象。可以通过set方法给所包含对象赋值。
组合的缺点:①:容易产生过多的对象。②:为了能组合多个对象,必须仔细对接口进行定义。