构造函数
c++利用构造函数实现了对象所占内存的赋值.对象初始化时强制执行构造函数,如果我们没有自己实现构造函数,编译器将会提供默认的构造函数.
构造函数是作用于对象初始化的,主要作用在创建对象时的成员变量赋值,构造函数由编译器自动调用,不需要手动调用.当我们使用new时,会先使用malloc申请一块堆区空间,然后调用构造函数为申请的空间赋值.
构造函数语法:
没有返回值:类名(){}
函数名称与类名相同
构造函数可以有参数,可以重载
编译器在创建对象的时候会自动调用构造参数
#include<iostream>
//引用库文件的时候使用<>,引用自己实现的头文件时使用" "
Using namespace std;
//结构体的默认访问权限是pulic,类的默认访问权限是private
Class people{
int a;
char b;
Public:
//构造函数:和类名相同 无返回值 可以有参数(重载)
People(){
cout<<"无参构造"<<endl;
}
People(int a){
a = a1;
cout<<"a: "<<a<<endl;
}
People(int a1,char b1){
a = a1;
b = b1;
cout<<"a b:"<<a<<" "<<b<<endl;
}
void fun(){}
};
int main(){
People p;//会调用无参构造
People p1(1);//调用一个参数的构造函数
People p2(1,'2');//调用两个参数的构造函数
p1.fun();
//p.fun();
P2.fun();
}
#include<iostream>
#include<list>
Using namespace std;
Class People{
Public:
int a ;
char b;
People(){
Cout <<"无参构造"<<endl;
}
People(int a1){
a = a1;
cout<<"a: "<<a<<endl;
}
People(int a1; char b1){
a = a1;
b = b1;
cout<<"a b :"<<a<<" "<<b<<end1;
}
Void fun(){}
};
int main(){
People p(1); //在栈区创建了一个对象p,作用域结束会自动释放p的内存
//malloc 不会调用构造函数,new 会先调用malloc然后再调用对应的构造函数
People *p1 = new people();
People *p2 = new people(1);
People *p3 = new people(1,'2');
//释放堆区内存
delete p1;
delete p2;
delete p3;
//在堆区数组
People *p4 = new people[4];//创建了四个people对象在堆区,调用的是无参构造
//释放堆区内存
delete[ ]p4;
int *a = new int(3);//在堆区创建了一个int类型的变量值为3
delete a;
int *a = new int[3];//在堆区创建了一个int类型的数组大小为12字节
delete [ ]a1;
}
This 指针
this指向当前对象.在c++中,每一个对象都能通过this指针来访问自己的地址。this指针是所有成员函数的隐含参数.因此在成员函数的内部,他可以用来指向调用函数的对。主要作用区分同名成员变量和参数.
友元函数没有this指针,因为他不是类内部函数.
#include<list>
#include<iostream>
using namespace std;
class people {
int a;
public:
people(int a) {
this->a = a;//this是指向当前对象的指针,哪个对象调用了含有this的函数,this的函数,this就指向谁
cout << this->a << endl;
}
};
int main() {
//people p; //实现了构造函数,编译器就不会实现默认构造函数
people p(3);
people p1(4);
}