成员属性有三种:private,protected,public;在类的继承中依然是这三种属性;
private继承中,派生类在拥有父类的所有成员后,会对继承下来的成员修改它们的属性,既将所有属性全部变成private;由此一来在派生类的外部代码中不能访问从父类继承过来的成员了,即使之前在父类中是public属性也不行;然而之前是public和protected的属性成员在变成private之后又跟之前在父类就是private属性的成员有区别,区别就是派生类可以在类代码中访问由public和protected属性转换过来的private成员,但是不能直接访问之前在父类就是private属性的成员;这三种继承中有以共同特点就是——要想访问原本就是private属性的成员,则必须通过继承过来的原本在父类是非private属性的接口才可以;
public继承,这种继承完全不改变之前父类中的属性,被继承过来的成员依然保留在父类的属性;然而还是要遵循前面提到的三种继承中的共同特点——要想访问原本就是private属性的成员,则必须通过继承过来的原本在父类是非private属性的接口才可以;
protected继承,也会修改从父类继承过来的属性,但是他只会将public属性的成员修改为protected成员;这样一来派生类外部代码就不能操作继承来的由public属性转换成protected属性的成员了;现在对于外部来说派生类中继承过来的成员都是受保护类型成员;
说了这么多概念性的东西,还是依照前例给出样例代码吧:(公有继承样例)
代码1#include<iostream>
2
3usingnamespacestd;
4
5classBase{
6public:
7intx;
8Base();
9voidsetx(int);
10intgetx(void);
11intgety(void);
12intgetz(void);
13voidshow(void);
14voidsetInterface(int,int);
15private:
16inty;
17voidsety(int);
18protected:
19intz;
20voidsetz(int);
21voidsetInterface(int);
22};
23
24Base::Base()
25{
26x=0;
27y=0;
28z=0;
29}
30
31voidBase::setx(intx)
32{
33this->x=x;
34}
35
36voidBase::sety(inty)
37{
38this->y=y;
39}
40
41voidBase::setz(intz)
42{
43this->z=z;
44}
45
46voidBase::show(void)
47{
48cout<<x<<""<<y<<""<<z<<endl;
49}
50
51voidBase::setInterface(inty)
52{
53sety(y);
54}
55
56voidBase::setInterface(inty,intz)
57{
58sety(y);
59setz(z);
60}
61
62intBase::getx(void)
63{
64returnx;
65}
66
67intBase::gety(void)
68{
69returny;
70}
71
72intBase::getz(void)
73{
74returnz;
75}
76
77classDerived_A:publicBase{
78intsum;
79public:
80voidshow(void);
81voidsetSum(Base&);
82Derived_A();
83};
84
85Derived_A::Derived_A()
86{
87sum=0;
88}
89
90voidDerived_A::show(void)
91{
92cout<<getx()<<"+"<<gety()<<"+"
93<<getz()<<"="<<sum<<endl;
94}
95
96voidDerived_A::setSum(Base&b)
97{
98setx(b.x+1);//公有成员直接访问
99//sety(b.y) 不能直接访问继承过来的private属性成员
100setInterface(b.gety()+2);//private属性可以通过父类的非private接口去访问
101setz(b.getz()+3);//可以访问非private属性成员
102sum=getx()+gety()+getz();
103}
104
105intmain()
106{
107Base b;
108b.setx(1);
109b.setInterface(2,3);
110b.show();
111Derived_A a;
112a.setSum(b);
113a.show();
114
115return0;
116}
117
118/****************
119
120*由于篇幅和时间关系,其他两个样例就不写了。其实我很懒,O(∩_∩)O~.........**
121
122****************/
123原文链接: https://www.cnblogs.com/accepted/archive/2010/09/05/1818525.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/14718
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!