1.C++编译过程
(1)预处理
a、将除源文件以外的内容全部加入到源文件中
b、删除掉注释
c、宏替换(#define num 100)
d、条件编译(#ifndef #define #endif)
(2)编译
a、检查用户编写的代码是否符合C++规范
b、将源代码翻译成汇编语言
(3)汇编
a、将汇编语言翻译成机器语言(二进制)
(4)链接
b、生成可执行文件
类与对象
类(class)
描述现实世界中的事物,用C++进行编程的时候,通常是将现实世界中的事物用类来进行描述,类的关键字:class,描述一个人,特征:姓名、年龄、性别、肤色等等,行为:吃饭、睡觉、走路、跑步等等,类是一个泛指(抽象)的概念,不是特指某一个事物,简单的理解为没有实实在在存在于现实世界中(只是你脑海里一个概念)
用类描述事物的格式:
class 类名(标识符名称)
{
//特征---变量
//行为---函数
};
对象
对象是类的实例化(特指实际的例子),是特指的概念,例如:人(泛指的概念)-----对人进行实例化------张三(特指的概念)
举例:
class People
{
//特征
char name[5];//name用于描述姓名
int age;//age用于描述年龄
char sex;//sex用于描述性别
char fuse;//fuse用于描述肤色
//行为
void eat()//吃饭
{
cout<<"这个人在吃饭"<<endl;
}
void sleep()//睡觉
{
cout<<name<<"在睡觉"<<endl;
}
};
int main()
{
//对象
People zhangsan;//在栈区实例化
People * lisi = new People;//在堆区实例化
zhangsan.eat();//访问People里的eat方法
lisi->sleep();//访问People里的eat方法
}
构造函数
构造函数是一种特殊的函数,它实质还是称为函数,如果用户没有显示的书写构造函数,那么编译器会帮用户自动的生成了一个默认的构造函数,反之,那么编译器就不会自动生成默认的构造函数
作用:就是为了初始化类的成员变量
格式:
类名 (参数列表)
{
//代码块---用于初始化类的成员变量
}
People (/*参数列表*/)
{
cout << "人们"<<endl;
}
如何调用构造函数?
a、构造函数的显示调用
格式:
类名 对象名(构造函数参数列表);//这时候就显示的调用类的构造函数
例如:
int main()
{
People people();
总结:构造函数与普通函数的区别
不同点:
a、普通函数前有返回值类型,而构造函数前没有返回值
b、普通函数后面没有初始化列表,而构造函数后有初始化列表
c、普通函数调用的时候以显式调用的方式,而构造函数不仅可以显示的调用还可以隐式的调用
相同点:
d、都可以带参数或者是不带参数
e、都可以发生重载
析构函数
C++里的析构函数也是一种特殊的函数,它实质也是函数,如果用户没有显示的书写析构函数,那么编译器会自动帮用户生成一个默认的隐藏的析构函数,反之,那么编译器就不会帮用户生成一个析构函数。
作用:释放空间
格式:
~类名 ()
{
//代码块
}
~Test1()//析构函数
{
cout << "析构函数" << endl;
}
总结:
a、析构函数不能带参数
b、类体里面只允许有一个析构函数(析构函数不能发生重载)
c、析构函数前没有返回值
友元
目的:给类的外部提供一个访问类的私有成员的接口
关键字:friend,用关键字来声明友元函数和友元类
(1)友元函数
C++提供了友元函数就可以通过友元函数访问到类的私有成员,C++规定是友元函数声明在类里,就表示该函数是该类的友元,那么就可以通过友元函数访问类的私有成员,友元函数的定义放置在类的外部。
声明格式(在类里声明):
friend 返回值类型 函数名(参数列表);//友元函数的声明
定义(在类外定义):
返回值类型 函数名(参数列表)
{
//函数体
}
、
重载、重写、隐藏(覆盖)
(1)重载
一般是发生在函数中,C++也支持运算符重载
解释:
C++里的函数名相同、函数的参数个数、类型、顺序不同,可以发生重载(函数重载)
例如:
void function()
{
}
void function(int)
{
}
void function(char)
{
}
void function(int , char)
{
}
void function(char , int)
{
}
(2)重写
就是将原来函数重新复制一份(函数的返回值、函数名、参数个数、类型、顺序都相同)
例如:
void funiton()
{
}
void funiton()
{
}
(3)隐藏(覆盖)
就是将原来函数(变量)重新复制一份,就将原来的函数(变量)覆盖(隐藏),隐藏一般用的最多的是具有继承关系的两个类中.