C++
c++与c语言的区别是c++在c语言的基础上编译器自己生成了代码替我们完成了许多事情
封装
把函数定义到结构体内部,就是封装
例如:
struct Student
{
int a;
int b;
int c;
int Plus()
retuen a+b+c;
};
//在结构体中定义的函数,编译器将自动为其传入结构体的地址作为参数,且使用结构体其他成员是也不需要用指针的方式一个一个使用了
int main()
{
Student s={1,2,3};
int r=s.Plus();
}
必须在结构体中的函数前加上结构体名称,表明是哪个结构体中的函数
类
带有函数的结构体,称为类(只声明未使用时不占内存)
成员函数
结构体里面的函数,称为成员函数(成语函数不占用结构体空间)
this指针
this指针是编译器默认的,通常都会使用ecx进行参数的传递
成员函数都有this指针,无论是否使用
如传入成员函数的参数就是this指针
this指针存储的就是当前结构体的首地址,不允许将this指针进行运算或赋值
this指针不占用结构体的宽度
使用:
struct s{
int a;
int Plus(int a)
{
this->a=a;
}
this->a,用于表示结构体中的成员,区分成员函数定义的变量a与结构体的成员s.a
构造函数
struct Student
{
int a;
int b;
int c;
int Plus()
retuen a+b+c;
Student()//构造函数
printf(“观察这个函数\n”);
};
int main()
{
Student p(1,2);//有参数就调用有参构造函数
Student q;//无参数就调用无参构造函数
}
与类同名/没有返回值
创建对象的时候执行/主要用于初始化
编译器不要求必须提供(可有可无)
可以有多个构造函数(最好有一个无参的),称为重载
如 Student()
printf(“无参构造函数”);
Student(int a,int b,int c)
{
this->a=a;
this->b=b;
this->c=c;
printf("有参构造函数“);
}
析构函数
struct Student
{
int a;
int b;
int c;
int Plus()
retuen a+b+c;
~Student()//析构函数
printf(“析构函数执行了\n”);
};
int main()
{
Student p;//当创建的对象被清除时执行析构函数
}
只能有一个析构函数,不能重载
不能带任何参数
不能带返回值
作用:主要用于清理工作
struct Student
{
int a;
int b;
char* c;
Plus(int a,int b)
{
this->a=a;
this->b=b;
c=(char*)malloc(1024)
}
~Student()//析构函数
{
printf(“析构函数执行了\n”);
free©;
}
};
编译器不要求必须提供
析构函数何时执行?
当对象在堆栈中分配,函数结束前执行
当对象在全局区分配,进程结束前执行
继承
struct Person
{