嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第二天-类与对象(物联技术666)

链接:https://pan.baidu.com/s/1Am83Ut449WCbuTiodwJWgg?pwd=1688
提取码:1688

上午:类和对象  

下午:类和对象高级应用

教学内容:

1、构造函数\析构函数\拷贝构造函数

构造函数:

每一个对象的创建都必须初始化,如果在没有写初始化函数(即构造函数),系统会默认写构造函数,但有些时候必须自己写构造函数。(比如,在定义初始化时候要申请空间或者牵涉指针)

构造函数的特点:

构造函数具有一些特殊的性质

• 构造函数的名字必须与类名相同

• 定义对象时被系统自动调用

• 可以有任意类型的参数,但不能有返回值

• 被定义为公有的,但其它时间无法被调用

例如:

//*****************************************

class Complex{

private:

       double real;

       double imag;

public:

       Complex(double a=10, double b=10)//构造函数,与类同名,无返回值,同时可以缺省使用

       {    

             real = a;

             imag = b;

             cout<<"In Constructor t!"<

       }

       ...

};

//**************************

析构函数:

每一个对象在结束的时候,系统必须收回空间,收回空间由析构函数来完成,如果在类中没有析构函数,系统默认自己写析构函数。有些时候必须自己写析构函数(比如,在定义初始化时候要申请空间或者牵涉指针)

析构函数有以下一些特点:

• 析构函数与构造函数名字相同,但它前面必须加一个波浪号(~)

• 析构函数没有参数,也没有返回值,而且不能重载,因此在一个类中只能有一个析构函数

• 当撤消对象时,编译系统会自动地调用析构函数

例如:

//******************************************

class Complex{

private:

       double real;

       double imag;

public:

       Complex(double r = 0.0,double i = 0.0)        //构造函数,有缺省设置

       {

             cout<<"construction…"<

             real = r;

             imag = i;

       }

       ~Complex()  //析构函数,没有返回值,没有参数,前面加~,对象在接收时自动调用

       {

             cout<<"destruction…"<

       }

...

}

//****************************

拷贝构造函数:

在程序中,如果对象赋值,在类中如果没有拷贝构造函数,编译器会自动编写拷贝构造函数,但是如果在有指针或有申请空间的类中,直接拷贝会出现,二个对象指向同一个空间的问题,可能会出现双释放空间,从而产生段错误。

自定义拷贝构造函数

classname(const classname &ob) //classname类名称

{

//拷贝构造函数的函数体

}

例如:

//********************************

class StringData

{

private: char *str;

publie:

StringData(char *s)      //构造函数

{

str = new char[strlen(s)+1];

strcpy(str,s);

}

~StringData()       //析构函数

{

delete str;

}

//…

};

int main()

{

StringData x(“abc”);     //重新创建一个对象

StringData y(x);     //StringData y = x;         

//拷贝一个对象,所有东西都拷贝了,此时对象y的str指针指向x对象new的空间ÿ

你可能感兴趣的:(嵌入式培训课程笔记,笔记,c++,qt,linux,开发语言,网络)