C++基础教程(总结)(二)

2015-01-27 14:01:35 · 作者: · 浏览: 53
函数:
在编译时将调用的函数的代码直接嵌入到主调函数中,而不是将流程转出去,这种嵌入到主调函数中的函数称为内置函数(inline function),又称内嵌(内联)函数
在函数首行的左端加一个关键字inline,可在声明和定义时同时写,也可只在其中一处写,效果相同
可节省运行时间,但增加了目标程序的长度
只有那些规模小而又被频繁调用的简单函数,才适合声明为inline函数;而且对函数作inline声明对编译系统只是建议性的
函数重载、覆盖与隐藏:
  
?
9、枚举
enum weekday{sun, mon, tue, wed, thu, fri, sat};//声明
weekday workday, week_end; ? //定义枚举变量
C++中允许不写enum(一般也不写),花括号中的称为枚举元素或枚举常量,C++编译按定义时的顺序对它们赋值为0,1,2,3,…
?
可在声明枚举类型时指定枚举元素的值:
enum weekday{sun=7, mon=1, tue, wed, thu, fri, sat};
编译系统自动按顺序加1,则sat为6
?
一个整数不能直接赋给一个枚举变量,应先强制类型转换,例:workday = weekday(2); //C++风格形式
?
10、共用体(联合)
  
?
11、结构体
  
?
12、位段(位域)
  
?
枚举、共用体、结构体、位段源代码:
复制代码
#include
using namespace std;
?
//声明枚举类型
enum weekday{sun=7, mon=1, tue, wed, thu, fri, sat};
struct Student ?//结构体
{
? ? int age;
? ? char name[20];
? ??
? ? union P ? ? //共用体
? ? {
? ? ? ? int grade;
? ? ? ? char position[10];
? ? }category;
?
? ? unsigned a:2;//位段
? ? unsigned b:3;
};
int main()
{
? ? weekday workday;//定义枚举变量
? ? workday=weekday(1);//C++风格的强制类型转换格式
? ? cout<
? ? ? ? <
?
? ? Student person[2];//定义共用体变量
? ? person[0].category.grade=20;
? ? cout<
?
? ? person[1].a = 3; //给位段赋值
? ? cout<<"a="<
? ??
? ? ?person[1].b = 12;
? ? ?//十进制12-->二进制1100--取其低3位-->二进制100-->十进制4
? ? cout<<"b="<
?
? ? return 0;
}
复制代码
?
?
13、类
?
类是对象的抽象,不占存储空间;对象是类的实例,占用存储空间
一个对象所占的空间的大小只取决于其中的数据成员所占的空间,而成员函数不占用对象的存储空间
信息隐蔽 = 类的公用接口与私有实现的分离
把类的声明(包含成员函数的声明)放到一个头文件中;把成员函数的定义放到另一文件中,单独编译,从而不重复编译
类库 = 类声明头文件 + 已编译过成员函数的定义的目标文件
类的声明与对象的定义:
  
?
成员对象的访问:
  
?
构造函数:
  
?
析构函数:
~Box( ){ };
析构函数与类同名,无返回值(类型),无参数
一个类只能有一个析构函数
当对象的生命周期结束时,自动执行析构函数
对一个对象来说,析构函数是最后一个被调用的成员函数
其作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作
调用析构函数的顺序与构造函数相反
?
对象指针:
  
?
类和对象源代码(一):
复制代码
#include
using namespace std;
class Box
{
? ? int length, width, height;//私有成员
public:
? ? Box();
? ? //用参数初始化表对数据成员初始化
? ? Box(int len, int w, int h):length(len),width(w),height(h)
? ? { ? ?
? ? }
? ? ~Box()
? ? {
? ? }
? ??
? ? int volume();
};//分号不可少
Box::Box()
{
? ? length = 5;
? ? width ?= 5;
? ? height = 5;
}
int Box::volume()
{
? ? //显示的使用this指针
? ? return this->width * this->height * this->length;
}
?
int main()
{
? ? Box b1;
? ? Box *p = NULL;//指向对象的指针
? ? //定义对象数组
? ? Box b[3] = {Box(),Box(10,10,10),Box(20,20,20)};
? ? p = &b[2];
?
? ? cout<
? ??
? ? cout<
? ? ? ? <
? ??
? ? cout<volume() ?<<'\t'
? ? ? ? <<(*p).volume()<
?
? ? return 0;
}
复制代码
?
?
共用数据的保护:
?
  
?
静态成员:
?
  
?
对象的赋值与复制:
?
  
?
友元:
?
  
?
类和对象源代码(二):
?
复制代码
#include
using namespace std;
class Date;//对Date类的提前引用声明
class Time
{
public:
? ? Time(int, int, int);
? ? void display(Date &);//形参为对象的引用
private:
? ? int hour,minute,second;
};
class Date
{
public:
? ? Date();
? ? Date(int, int, int);
? ? //声明Time类中的display函数为Date类的友元成员函数
? ? friend void Time::display(Date &);
private:
? ? int year,month,day;
};
?
Time::Time(int h, int m, int s):hour(h),minute(m),second(s)
{
}
void Time::display(Date &d)
{
? ? cout<<"d.day="<
? ? ? ? <<"t.hour="<
}
Date::Date()
{
? ? year ?= 1000;
? ? month = 12;
? ? day ? = 20;