如果在类内声明类外使用的话,那我举个例子好了
#include<iostream>
using namespace std;
class stu
{
public:
void print();
};
stu::print()//对,就这样用
{
cout<<"hahah"<<endl;
}
构造函数:
1.函数名与类名相同
2.没有函数返回值类型,也没有返回值
3**.一个新的对象被建立时,该对象的构造函数会自动的被调用,对这个对象进行初始化工作(也就是说每次新对象就调用一次)**
4. 新对象的建立包括两种情况,CA a(对象说明语句);CA *pa = new CA(对象指针指向动态开辟的堆区无名对象);
5.如果一个类说明中没有显式的给出构造,系统将自动给出一个缺省的(隐式)什么都不干的构造函数,<类名>(){}
6,如果说明中包括多个构造函数,一般会有不同的参数列表和函数体。(函数重载)
class student
{
int a,b;
public:
student();//构造函数
//里面写一些想初始化的东西
student(int x,int y);
//以上是两种构造的函数//就是相当于重载函数一样
}
};
析构函数
对象死亡的时候可以调用析构函数
1.函数名与类名相同,前面加上一个~ 即~<类名>(){}
2.没有函数返回值类型,也没有返回值,也没有参数,析构只有一个
3.当对象出了他的作用域的时候,系统会自动调用析构函数(按照局部变量的方式理解)
4.析构函数的作用一般是用于给对象里面在堆区申请的内存释放
5.一个类只有一个析构函数
6.如果一个类中没有显示的给出析构,析构将自动给出一个(隐式)什么都不干的析构(如果有的话,系统就不给了)
//析构函数可以主动调用
class student
{
int a,b;
public:
~student();//析构函数
}
新的例子:
#include<iostream>
using namespace std;
class student
{
char *name;
public:
student(char *str)
{
name=new char[strlen(str)+1];
strcpy(name,str);
}
void get
{
cout<<name<<endl;
}
~student()
{
if(name==NULL)
{
delete[]name;
name=NULL;
}
}
};
this指针
this指针总是指向调用者对象,什么意思呢,我们用下面的例子来比较说明一下,例子1:
#include<iostream>
using namespace std;
class stu
{
public:
int a;
void fun(int a)
{
a=a;
}
};
int main()
{
stu m;
m.fun(10);
cout<<m.a<<endl;//这样的话输出的是乱码
return 0;
}
例子2:
#include<iostream>
using namespace std;
class stu
{
public:
int a;
void fun(int a)
{
this->a=a;//这里的this->a表达的意思是这个a值指向了调用对象中的a而不是fun()中的a,这样的话,类中的a就被赋值了,那么就可以输出了
}
};
//这个this->a代表的是新的对象中有a这个变量,然后被fun(int a)中的a给赋值了,如程序所示。
int main()
{
stu m;
m.fun(10);
cout<<m.a<<endl;//这样子输出来的是10
return 0;
}