c++继承
来源:互联网 发布:vb财务管理系统源码 编辑:程序博客网 时间:2024/06/03 01:59
继承分为公有,私有,保护。具体定义是什么自己去查,网上多了(那定义真是云里雾里,就他自己能看懂)。这里主要是通俗易懂的程序。
代码(好多编译器用添加头文件的方式写继承都会报错,解决方法就是全写在int main()里面):
第一部分:公有,私有,保护:
1.数值的继承:
#include <iostream>using namespace std;class A{public: A(){ //类里面赋值用构造函数,不要用int a=0,int b=1,int c=2会报出莫名其妙的错误.. a = 0; b = 1; c = 2; } int a;protected: int b;private: int c;};class B : public A{ public: void show1() { cout<<a<<b<<endl; //这里只能输出a,b不能输出c. }};class C : protected A{ public: void show1() { cout<<a<<b<<endl; //这里只能输出a,b不能输出c }};class D : private A{ public: void show1() { cout<<a<<b<<endl; //这里只能输出a,b不能输出c }};int main(){ B x; x.show1(); C y; y.show1(); D z; z.show1(); return 0;}
2.函数的继承:
#include <iostream>using namespace std;class A{public: A(){ a = 0; b = 1; c = 2; } int a; int sum1() { int x=a+6; return x; }protected: int b; int sum2() { int x=b+6; return x; }private: int c; int sum3() { int x=c+6; return x; }};class B : public A //只能够将公有和保护的函数调用。{ public: void show1() { int x=0; x+=sum1(); cout<<x<<endl; } void show2() { int x=0; x+=sum2(); cout<<x<<endl; } /*void show3() { int x=0; x+=sum3(); cout<<x<<endl; }*/};class C : protected A //public和protect的函数都可以调用。{ public: void show1() { int x=0; x+=sum1(); cout<<x<<endl; } void show2() { int x=0; x+=sum2(); cout<<x<<endl; } /*void show3() { int x=0; x+=sum3(); cout<<x<<endl; }*/};class D : private A //一个函数都不能调用。{ /*void show1() { int x=0; x+=sum1(); cout<<x<<endl; }*/ /*void show2() { int x=0; x+=sum2(); cout<<x<<endl; }*/ /*void show3() { int x=0; x+=sum3(); cout<<x<<endl; }*/};int main(){ B x; x.show1(); x.show2(); C y; y.show1(); y.show2(); //y.show3(); D z; //z.show1(); //z.show2(); //z.show3(); return 0;}
第二部分:
main()的深入调用:
///////////////////////////////////////////////////////////////////////
#include <iostream>using namespace std;class A{public: void show7() { cout<<666<<endl; }protected: void show8() { cout<<666<<endl; }private: void show9() { cout<<666<<endl; }};class B : public A{ public:};int main(){ B x; x.show7(); //这种方式也就是对象的方法,main里只能调用public,一定要注意。 return 0;}
//////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>using namespace std;class A{public: A() { a=1; } int a; void show() { cout<<a<<endl; }};class B : public A{public: B() { b=1; } int b; void show1() { cout<<b<<endl; }};int main(){ B x; cout<<x.a<<endl; cout<<x.b<<endl; x.show(); //继承的一重调用。 x.show1(); return 0;}
//////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>using namespace std;class A{public: A() { a=1; } void show1() { cout<<"A"<<endl; } int a;};class B : public A{public: B() { b=2; } void show2() { cout<<"B"<<endl; } int b;};class C : public A{public: C() { c=3; } void show3() { cout<<"C"<<endl; } int c;};class D : public B, public C{public: D() { d=4; } void show4() { cout<<"D"<<endl; } int d;};int main(){ D x; cout<<x.B::a<<endl; //用一点小技巧就可以无限深入的调用。 cout<<x.b<<endl; cout<<x.c<<endl; cout<<x.d<<endl; x.B::show1(); x.show2(); x.show3(); x.show4(); return 0;}
第三部分:虚基类(像上面第二部分那种要是层数超过10000层,那"::"得写多少,为了简化,出现了虚基类)。
#include <iostream>using namespace std;class A{public: A() { a=1; } void show1() { cout<<"A"<<endl; } int a;};class B : virtual public A//public前加了virtual要注意。{public: B() { b=2; } void show2() { cout<<"B"<<endl; } int b;};class C : virtual public A{public: C() { c=3; } void show3() { cout<<"C"<<endl; } int c;};class D : virtual public B, virtual public C{public: D() { d=4; } void show4() { cout<<"D"<<endl; } int d;};class E : virtual public D{public: E() { e=4; } void show5() { cout<<"E"<<endl; } int e;};int main(){ E x; cout<<x.a<<endl; cout<<x.b<<endl; cout<<x.c<<endl; cout<<x.d<<endl; cout<<x.e<<endl; x.show1(); x.show2(); x.show3(); x.show4(); x.show5(); return 0;}
第四部分:构造函数,不会,用到再说。
第五部分:继承的重用(设class B :public A,则在B中想要改掉A的某个函数 )
#include <iostream>using namespace std;class A{public: virtual void show() //注意函数前面加virtual。 { cout<<"AAA"<<endl; }};class B : virtual A //别用private就行,为什么,private总是会出一些奇怪的error。{public: virtual void show() //照着A抄下来,函数里面就是重写的内容。 { cout<<"BBB"<<endl; }};int main(){ B x; x.show(); return 0;}
哪里不对请指正。
1 0
- c继承
- C++----------------继承
- 【c#】继承
- C++:继承
- C++::继承
- [C++]继承
- 【C++】继承
- 【C#】继承
- 【c++】继承
- 【C++】继承
- c#-继承
- 【C++】 继承
- 【C#】继承
- C++|继承
- 【C++】继承
- C/C++--私有继承
- [C/C++]继承
- c++:私有继承,公有继承,保护继承
- C++的排序问题
- Pyqt print输出到控件中小demo
- 基于MATLAB的音频信号处理技术实现
- qt 最小化托盘 菜单互斥
- leetcode 344: Reverse String (c#版)
- c++继承
- ubuntu10.10桌面版安装ssh服务器
- c++中的 trivial destructor
- 推荐系统的重点、难点问题
- 【Leetcode】Duplicate Emails
- PHP笔记③数据类型
- 【转载】redis安装步骤
- 学习SpringMVC(五)之使用Servlet原生API
- ActionBar的用法