类声明
// 类是一种用户自定义类型,声明形式:
class 类名称
{
public:
公有成员(外部接口)
private:
私有成员
protected:
保护成员
};
公有、私有、保护成员
1.在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。
2.在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。
3.在关键字protected后面声明,与private类似,其差别表现在继承与派生时对派生类的影响不同。
数据抽象和封装
1.数据抽象是一种依赖于接口和实现分离的编程(和设计)技术。类设计者必须关心类是如何实现的,但使用该类的程序员不必了解这些细节。使用者只要抽象地考虑该类型做什么,而不必具体地考虑该类如何工作。
2.封装是一项将低层次的元素组合起来形成新的、高层次的实体的技术。函数是封装的一种形式:函数所执行的细节行为被封装在函数这个更大的实体中。被封装的元素隐藏了它们的实现细节------可以调用函数,但是不能直接访问函数所执行的语句。同样地,类也是一个封装的实体:它代表若干成员的聚集,设计良好的类隐藏了类实现的细节。
内联成员函数
内联函数
1.当程序执行函数调用时,系统要建立栈空间,保护现场,传递参数以及控制程序执行的转移等,这些工作需要时间和空间的开销。有些情况下,函数本身功能简单,但使用频率却很高,程序频繁调用该函数所化费的时间却很多,从而使得程序执行效率降低。
2.为了提高效率,一个解决办法就是不使用函数,直接将函数的代码嵌入到函数中。但这个办法也有缺点,一是相同的代码重复书写,二是程序可读性往往没有使用函数的好。
3.为了协调好效率和可读性之间的矛盾,C++提供了另一种方法,即定义内联函数,方法是在定义函数时用修饰词inline。
4.内联函数,编译器展开,不涉及函数调用开销。
内联函数与带参数宏的区别
inline int max(int a, int b)
{
return a>b ? a : b;
}
#define MAX(a,b) (a)>(b) ? (a) : (b)
1.内联函数调用时,要求实参和形参的类型一致,另外内联函数会先对实参表达式进行求值,然后传递给形参;而宏调用时只用实参简单地替换形参。
2.内联函数是在编译的时候、在调用的地方将代码展开的;而宏则是在预处理时进行替换的。
3.在C++中建议采用inline函数来替换带参数的宏。
新的类型转换运算符
1.const_cast<T>(expr)
2.static_cast<T>(expr)
3.reinterpret_cast<T>(expr)
4.dynamic_cast<T>(expr)
执行”安全向下“转型操作,也就是说支持运行时识别指针或所指向的对象,这是唯一一个无法用旧式语法来进行的转型操作。
成员函数的重载及其缺省参数
类与结构体
class与struct的区别:在未指定访问权限时,class默认的是私有的,struct默认是公有的。
隐含的this指针
1.成员函数是只读的代码,由所有对象共享,成员函数有一个隐含的附加形参,即指向该对象的指针,这个隐含的形参叫做this指针
2.使用this指针保证了每个对象可以拥有不同的数据成员,但处理这些成员的代码可以被所有对象共享。