C++ 封装、继承、多态
2018-08-24 11:02
323 查看
C++的封装:
封装的是实现面向对象的第一步,封装就是将数据、函数等集合在一个单元也就是类中,封装的目的是使得代码模块化;封装的意义在于增强安全性和简化编程,使用者不必了解具体的实现细节,而只是通过外部接口以及特定的访问权限来使用类成员。
C++定义了友元函数能够访问类中的私有函数:友元函数
eg:封装一个animal类
#include <bits/stdc++.h> using namespace std; class Animal { public: string name; virtual void get_name(string animal_name)=0; };
C++的多态:
C++的多态性是通过虚函数实现的,虚函数允许派生类重新定义成员函数,而派生类重新定义基类的做法成为覆盖/重写(重写分2种:重写成员函数,重写虚函数,只有重写虚函数才能体现C++的多态性)。[说到重写,就要提到重载,重载是允许多个同名函数,这些同名函数的参数个数不同、参数类型不同,但重写并没有体现多态性,为什么C++支持重载而C语言不支持重载?]
多态与非多态的实质区别就是函数地址是早绑定还是晚绑定,这里可以看c++的动态绑定和静态绑定;多态的目的就是接口重用。
eg:见下面的例子:
#include <bits/stdc++.h> using namespace std; class A { public: void foo() { printf("A::foo()\n"); } virtual void fun() { printf("A::fun()\n"); } }; class B : public A { public: void foo() { printf("B::foo()\n"); } void fun() { printf("B::fun()\n"); } }; int main(void) { A *a; B b; a=&b; a->foo(); //A::foo() a->fun(); //B::fun() cout<<"-----------"<<endl; A aa; B *bb; bb=(B *)&aa; bb->foo(); //B::foo() bb->fun(); //A::fun() return 0; }
这里的详细的解释见:c++的动态绑定和静态绑定
C++的继承:
继承可以使得子类具有父类的各种属性和方法,而不是需要再次编写相同的代码,在令子类继承父类的同时,子类可以重新定义某些属性,并重新某些方法,即覆盖父类原有属性和方法,使其获得与父类不同的功能。
eg:见下面例子
#include <bits/stdc++.h> using namespace std; class A { public: virtual void f1(){cout<<"A::f1()"<<endl;} virtual void f2(){cout<<"A::f2()"<<endl;} }; class B : public A { public: /*override的主要作用是告诉编译器该函数覆盖基类的同名函数,能够 *防止人为定义时函数名或者参数不对等,导致未覆盖基类的函数,所以 *添加override能够使程序员的意图更加明显 */ void f1() override{cout<<"B::f1()"<<endl;} //final:不允许其它类再次覆盖符f2()函数 void f2() final {cout<<"B::f2()"<<endl;} }; class C:public B { public: void f1(){cout<<"C::f1()"<<endl;} // void f2(){cout<<"C::f2()"<<endl;} 出错,f2()被声明成final }; int main(void) { A *a,aa; B *b,bb; C *c,cc; b=(B*)&aa; b->f1();//A::f1() b->f2();//B::f2() c=(C*)&cc; c->f1();//C:f1() c->f2();//B::f2() cout<<"-------------"<<endl; a=&bb; a->f1();//B::f1() a->f2();//B::f2() b=&cc; b->f1();//C::f1() b->f2();//B::f2() cout<<"-------------"<<endl; return 0; }
相关文章推荐
- 从C++封装、继承、多态谈UML建模
- 从C++对象内存布局和构造过程来具体分析C++中的封装、继承、多态
- 浅谈学习C++时用到的【封装继承多态】三个概念
- C++内存中的封装、继承、多态(上)
- C++的封装、多态、继承在C中的对应实现方式
- C++集锦一 OOP三个基本特征:封装、继承、多态
- c++封装、继承和多态
- C++内存中的封装、继承、多态(下)
- C++封装继承多态总结
- C++封装、继承、多态
- C++面向对象(封装,继承,多态)
- C++封装、继承、多态
- C++精进篇(十)之―封装、继承、多态
- sogou interview ==> C 实现 C++ 封装 继承 多态
- C++中三个特性(继承、封装、多态、类之间的关系)
- C++封装继承多态总结
- C++封装、继承、多态
- C++封装、继承、多态
- C++封装继承多态总结(转)
- c++面向对象三大特征封装、继承和多态知识总结