有了源代码如何做网站长春制作公司网站
- 作者: 五速梦信息网
- 时间: 2026年03月21日 06:53
当前位置: 首页 > news >正文
有了源代码如何做网站,长春制作公司网站,职称论文写作网站,建站设计公司包含对象成员的类 包含#xff0c;组合和层次化#xff1a;一个类里面的类成员之一是个类对象 我们来看个例子 #includeiostream using namespace std; class AA { private:int a; public:AA(int a):a(a){}void A(){cout a_ endl;} }; class …包含对象成员的类 包含组合和层次化一个类里面的类成员之一是个类对象 我们来看个例子 #includeiostream using namespace std; class AA { private:int a; public:AA(int a):a(a){}void A(){cout a_ endl;} }; class BB { private:AA t;int b; public:BB(int a,int b):t(a),b(b){}void B(){t.a_ 9;//不可以a是AA类的私有成员在BB类无法直接使用t { 9 };//可以cout b endl;t.A();//可以直接调用AA类的公有函数} }; int main() {BB t(2, 3);t.B(); } 这里的访问权限可能会让大家有一点绕。实际上并没有。 我们把AA类视为类把BB类视为main函数这样子BB类对AA类的访问权限就明白了。 私有继承 在C中私有继承是一种继承方式它定义了一个私有派生类也称为派生类。私有继承意味着派生类继承了基类的所有成员但这些成员在派生类中是私有的对外部不可见。 要进行私有继承请使用private关键字或者不使用任何关键字因为private是默认值因此省略访问限定符也将导致私有继承 格式如下 class 派生类名:private 基类名 { }或者class 派生类名:基类名 { } 使用私有继承时只能在派生类的方法里使用基类的方法 私有继承允许使用类名和作用域解析运算符来调用基类的方法 我们看个例子 #includeiostream using namespace std; class AA { private:int a; public:AA(int a):a(a){}void A(){cout a_ endl;} }; class BB :AA { private:int b; public:BB(int a,int b):AA(a),b(b){}void B(){A();//可以AA::A();//可以} };int main() {BB r(2, 3);r.B();} 我们怎么通过派生类访问基类对象呢当然是用强制类型转换 我们看个例子 #includeiostream using namespace std; class AA { private:int a; public:AA(int a):a(a){}void A(){cout a_ endl;} }; class BB :AA { private:int b; public:BB(int a,int b):AA(a),b(b){}AA B(){return (AA)this;//派生类强制转换为基类} };int main() {BB r(2, 3);AA tr.B();t.A();} 在私有继承中未进行显式类型转换的派生类引用或指针无法赋值给基类的引用或指针 #includeiostream using namespace std; class AA { private:int a; public:AA(int a):a(a){}void A(){cout a_ endl;} }; class BB :AA { private:int b; public:BB(int a,int b):AA(a),b(b){}};int main() {BB r(2, 3);AA t r;//这是不行的AA y r;//这是不行的 } 保护继承 保护继承是私有继承的变体。保护继承在列出基类时使用关键字protected: class 派生类名:protected 基类名 { } 使用保护继承时基类的公有成员和保护成员都成为派生类的保护成员。和私有继承一样基类的接口在派生类中也是可用的但是在继承层次结构之外是不可用的。当从派生类派生出另一个类时私有继承和保护继承的区别就体现出来了。使用私有继承时第三代类将不能使用基类的接口这是因为基类的公有方法在派生类中变成私有方法使用保护继承时基类的公有方法在第二代中变成受保护的因此第三代派生类可以使用它们。 三种继承方式的比较 公有继承(public)继承、私有继承(private)、保护继承(protected)是常用的三种继承方式。 1.公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时它们都保持原有的状态而基类的私有成员仍然是私有的不能被这个派生类的子类所访问。 2.私有继承(private) 私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员并且不能被这个派生类的子类所访问。 3.保护继承 保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员并且只能被它的派生类成员函数或友元访问基类的私有成员仍然是私有的。 三种不同继承方式的基类特性和派生类特性 公有继承保护继承私有继承公有成员变为派生类的公有成员派生类的保护成员派生类的私有成员保护成员变成派生类的保护成员派生类的保护成员派生类的私有成员私有成员变为只能通过基类接口访问只能通过基类接口访问 只能通过基类接口访问 能否隐式向上转换是是但只能在基类里否 注隐式向上转换:意味着无需进行显式类型转换就可以将基类指针或引用指向派生类对象 在上图中 1.基类成员对派生类都是public和protected的成员是可见的private的成员是不可见的。 2.基类成员对派生类的对象来说要看基类的成员在派生类中变成了什么类型的成员。如私有继承时基类的公有成员和私有成员都变成了派生类中的私有成员因此对于派生类中的对象来说基类的公有成员和私有成员就是不可见的。为了进一步理解三种不同的继承方式在其成员的可见性方面的区别下面从三种不同角度进行讨论。 对于公有继承方式 1.基类成员对其对象的可见性公有成员可见其他不可见。这里保护成员同于私有成员。 2.基类成员对派生类的可见性公有成员和保护成员可见而私有成员不可见。这里保护成员同于公有成员。 3.基类成员对派生类对象的可见性公有成员可见其他成员不可见。 所以在公有继承时派生类的对象可以访问基类中的公有成员派生类的成员函数可以访问基类中的公有成员和保护成员。这里一定要区分清楚派生类的对 象和派生类中的成员函数对基类的访问是不同的。 对于私有继承方式 1.基类成员对其对象的可见性公有成员可见其他成员不可见 2.基类成员函数对派生类的可见性公有成员和保护成员是可见的而私有成员是不可见的。 3.基类成员对派生类对象的可见性所有成员都是不可见的。 所以在私有继承时基类的成员只能由直接派生类访问而无法向下继承。 对于保护继承方式 这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言而对于基类成员有不同的可见性。(可见性也就是可访问性)。 关于可访问性还有另外一种说法。这种规则中称派生类的对象对基类访问为水平访问称派生类的派生类对基类的访问为垂直访问。 1 #includeiostream2 class A{3 private:4 int privatedataA;5 protected:6 int protecteddataA;7 public:8 int publicdataA;9 }; 10 //基类A的派生类B(公有继承) 11 class B :public A{ 12 13 public: 14 void funcA() 15 { 16 int b; 17 b privatedataA; 18 //错误基类中的私有成员在派生类中不可见 19 b protecteddataA; 20 //正确基类的保护成员在派生类中是保护成员 21 b publicdataA; 22 //正确基类的公共成员在派生类是公共成员 23 } 24 }; 25 //基类A的派生类C 私有继承 26 class C :private A{ 27 28 public: 29 void funcA() 30 { 31 int c; 32 c privatedataA; 33 //错误基类中的私有成员在派生类中不可见 34 c protecteddataA; 35 //正确基类的保护成员在派生类中是私有成员 36 c publicdataA; 37 //正确基类的公共成员在派生类是私有成员 38 } 39 }; 40 //基类A的派生类D 保护继承 41 class D :protected A{ 42 public: 43 void funcA() 44 { 45 int d; 46 d privatedataA; 47 //错误基类中的私有成员在派生类中不可见 48 d protecteddataA; 49 //正确基类的保护成员在派生类中是保护成员 50 d publicdataA; 51 //正确基类的公共成员在派生类是保护成员 52 } 53 }; 54 void main() 55 { 56 int value; 57 B objB; 58 value objB.privatedataA;//错误基类的私有成员在派生类不可见对对象不可见 59 value objB.protecteddataA;//错误基类的保护成员在派生类中是保护成员对对象不可见 60 value objB.publicdataA;//错误基类的公共成员在派生类中是公共成员对对象可见 61 62 C objC; 63 value objC.privatedataA;//错误基类的私有成员在派生类不可见对对象不可见 64 value objC.protecteddataA;//错误基类的保护成员在派生类中是私有成员对对象不可见 65 value objC.publicdataA;//错误基类的公共成员在派生类中是私有成员对对象不可见 66 67 D objD; 68 value objD.privatedataA;//错误基类的私有成员在派生类不可见对对象不可见 69 value objD.protecteddataA;//错误基类的保护成员在派生类中是保护成员对对象不可见 70 value objD.publicdataA;//错误基类的公共成员在派生类中是保护成员对对象不可见 71 system(pause); 72 }
相关文章
-
有了域名之后怎么做自己的网站做百度商桥网站
有了域名之后怎么做自己的网站做百度商桥网站
- 技术栈
- 2026年03月21日
-
有了域名建设网站运营哪里学的比较专业
有了域名建设网站运营哪里学的比较专业
- 技术栈
- 2026年03月21日
-
有了域名 网站建设网站图片批量上传
有了域名 网站建设网站图片批量上传
- 技术栈
- 2026年03月21日
-
有了云服务器怎么做网站wordpress 招聘插件
有了云服务器怎么做网站wordpress 招聘插件
- 技术栈
- 2026年03月21日
-
有没有帮别人做网站艺术网站源码
有没有帮别人做网站艺术网站源码
- 技术栈
- 2026年03月21日
-
有没有好的网站可以学做头发wordpress手机管理
有没有好的网站可以学做头发wordpress手机管理
- 技术栈
- 2026年03月21日
