C++ 基础概念(总结)
2012-12-27 11:26
309 查看
1. 类及其成员——封装(encapsulation)
2.基类与派生类——继承(Inheritance)
3.this指针:成员函数有一个隐藏参数,名为this指针
4. 虚函数与多态(Polymorphism)
若不用虚函数:
a. 若基类与派生类都定义了“相同名称之成员函数”,那么通过对象指针调用成员函数时,到底调用哪一个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定。例如,如果你以一个“基类之指针”指向“派生类之对象”,那么经由该指针你只能够调用基类所定义的函数。
b.如果你以一个“派生类之指针”指向“基类之对象”,你必须先做明显的转型操作(explicit cast).这种做法很危险(Object slicing ),不符合真实生活经验,在程序设计上也会给程序员困惑。
有了虚函数:
实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数。虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public 。
虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新定义,则它继承其基类的虚函数。
5. 多态(Polymorphism)
在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。
纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。除非在派生类中完全实现基类中所有的的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。
6. 静态成员(变量与函数)
static 成员变量不属于对象,而是类的一部分。首先必须初始化它,因为在还没有诞生对象的时候就有了,否则会产生连接错误。
static成员函数不需要借助对象来调用,所以编译器不会不会为它暗加一this指针,也因此,static成员函数无法处理类中的non-static成员变量。
2.基类与派生类——继承(Inheritance)
3.this指针:成员函数有一个隐藏参数,名为this指针
class CShape{ ... public: void setcolor(int color){m_color=color;} }; 编译后,其实是: class CShape{ ... public: void setcolor(int color,(CShape*)this){this->m_color=color;} };
4. 虚函数与多态(Polymorphism)
若不用虚函数:
a. 若基类与派生类都定义了“相同名称之成员函数”,那么通过对象指针调用成员函数时,到底调用哪一个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定。例如,如果你以一个“基类之指针”指向“派生类之对象”,那么经由该指针你只能够调用基类所定义的函数。
b.如果你以一个“派生类之指针”指向“基类之对象”,你必须先做明显的转型操作(explicit cast).这种做法很危险(Object slicing ),不符合真实生活经验,在程序设计上也会给程序员困惑。
有了虚函数:
实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数。虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public 。
虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新定义,则它继承其基类的虚函数。
5. 多态(Polymorphism)
在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。
纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。除非在派生类中完全实现基类中所有的的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。
纯虚函数是一种特殊的虚函数,它的一般格式如下: class <类名> { virtual <类型><函数名>(<参数表>)=0; … };
6. 静态成员(变量与函数)
static 成员变量不属于对象,而是类的一部分。首先必须初始化它,因为在还没有诞生对象的时候就有了,否则会产生连接错误。
static成员函数不需要借助对象来调用,所以编译器不会不会为它暗加一this指针,也因此,static成员函数无法处理类中的non-static成员变量。
相关文章推荐
- (总结之mfc书最后附录)c++基础知识点-概念
- C++基础概念总结(一)
- C++基本概念总结——静态成员
- Apache Pig的一些基础概念及用法总结3(转)
- 【C++基础】关键字const的总结
- C++基础知识点总结之常量与引用
- C/C++基础知识总结2
- 重拾java基础(十):包的概念总结
- linux基础概念和个人笔记总结(2)
- c/c++笔试题——C++中 new/delete 概念和用法总结
- Java基础概念总结
- [转载]Java面试基础概念总结
- linux基础概念和个人笔记总结(5)
- linux设备驱动归纳总结(二):模块的相关基础概念
- C++基础编程---1.3模糊概念
- C++基础总结1
- 面试知识点总结之c++基础(一)
- c++基础--面试总结
- 面试笔试总结(二)之 C++基础
- C++基础学习总结0001