阿牛哥C++
第十四讲 实验三
-----对象的释放方法,析构函数的使用
析构函数前加~
和类名相同
没有参数
且是唯一的
不能重载
实现
系统会自动的调用析构函数。
指针变量会自动的释放内存空间,所以没有析构的说法
#include <iostream.h>
#include <string.h>//strcpy head file
class CStudent
{
public:
CStudent(); //构造函数一定和它的类名字是一样的
CStudent(char *name,int age); //可以和成员变量区分开来
~CStudent();
void initialize(char *name,int age); //赋值
void output(); //输出类对象
private:
char m_name[20];
int m_age;
};
//习惯在成员变量前面加上m_表示成员变量,以区分
//实现
CStudent::CStudent() //类很多,要用域操作符表明属于哪一个类
{
strcpy(m_name,"");
m_age = 0;
} //构造函数就是对数据成员进行初始化
CStudent::CStudent(char *name,int age)
{
strcpy(m_name,name);
m_age = age; //从形参传递过来
} //实现两个构造函数
void CStudent::initialize(char *name,int age)
{ strcpy(m_name,name);
m_age = age;
}
//析构函数的实现
CStudent::~CStudent()
{
cout<<"the object is deconstructing"<<endl;//作为析构的
标记
}
void CStudent::output()
{
cout<<m_name<<" "<<m_age<<endl;
}
//定义对象
void main()
{
//无参的调用
/* CStudent stu1;
stu1.output();
CStudent stu2("Tom",23);
stu2.output();
stu2.initialize("JIM",44);
stu2.output();
*/
//数组的使用和初始化
/* CStudent stu[3];
CStudent stu[3]={
CStudent(),CStudent("Crystal",21),CStudent()
};
for(int i=0;i<3;i++)
{
stu[i].output();
}
*/
//指针的使用和初始化
CStudent stu;
CStudent *p = &stu;
p->output();
(*p).output();
}
程序会把析构的标记输出
第十五讲 实验四
----掌握引用的使用方法
定义别名,一定要初始化,
使用,用别名调用其输出函数,
#include <iostream.h>
#include <string.h>//strcpy head file
class CStudent
{
public:
CStudent(); //构造函数一定和它的类名字是一样的
CStudent(char *name,int age); //可以和成员变量区分开来
~CStudent();
void initialize(char *name,int age); //赋值
void output(); //输出类对象
private:
char m_name[20];
int m_age;
};
//习惯在成员变量前面加上m_表示成员变量,以区分
//实现
CStudent::CStudent() //类很多,要用域操作符表明属于哪一个类
{
strcpy(m_name,"");
m_age = 0;
} //构造函数就是对数据成员进行初始化
CStudent::CStudent(char *name,int age)
{
strcpy(m_name,name);
m_age = age; //从形参传递过来
} //实现两个构造函数
void CStudent::initialize(char *name,int age)
{ strcpy(m_name,name);
m_age = age;
}
//析构函数的实现
CStudent::~CStudent()
{
cout<<"the object is deconstructing"<<endl;//作为析构的
标记
}
void CStudent::output()
{
cout<<m_name<<" "<<m_age<<endl;
}
//定义对象
void main()
{
//无参的调用
/* CStudent stu1;
stu1.output();
CStudent stu2("Tom",23);
stu2.output();
stu2.initialize("JIM",44);
stu2.output();
*/
//数组的使用和初始化
/* CStudent stu[3];
CStudent stu[3]={
CStudent(),CStudent("Crystal",21),CStudent()
};
for(int i=0;i<3;i++)
{
stu[i].output();
}
*/
//指针的使用和初始化
/* CStudent stu;
CStudent *p = &stu;
p->output();
(*p).output();
*/
//引用的使用
CStudent stu("Tom",32);
CStudent &alias_stu = stu;
alias_stu.output();
}
第十六讲 实验六
----this指针的使用
掌握两方面的应用
区别数据成员和普通变量
返回对象本身??第十七个视频文件讲解。
主要解决问题形参(普通变量)与数据成员的名字相同的问题。
this->age=age;
this 指向当前对象,所谓当前对象就是指我们下在调用的函数的对象
谁调用这个函数,this指针就指向谁,即指向当前的数据成员
返回对象本身??
第十八讲 实验七
--动态内存的分配,动态分配对象数组的方法。
new 分配内存
delete 释放内存空间
#include <iostream.h>
#include <string.h>//strcpy head file
class CStudent
{
public:
CStudent(); //构造函数一定和它的类名字是一样的
CStudent(char *name,int age); //可以和成员变量区分开来
~CStudent();
void initialize(char *name,int age); //赋值
void output(); //输出类对象
private:
char m_name[20];
int m_age;
};
//习惯在成员变量前面加上m_表示成员变量,以区分
//实现
CStudent::CStudent() //类很多,要用域操作符表明属于哪一个类
{
strcpy(m_name,"");
m_age = 0;
} //构造函数就是对数据成员进行初始化
CStudent::CStudent(char *name,int age)
{
strcpy(m_name,name);
m_age = age; //从形参传递过来
} //实现两个构造函数
//以上数据成员用_标示了出来,如果使用this指针的话可以用this-
>age=age来实现
void CStudent::initialize(char *name,int age)
{ strcpy(m_name,name);
m_age = age;
}
//析构函数的实现
CStudent::~CStudent()
{
cout<<"the object is deconstructing"<<endl;//作为析构的
标记
}
void CStudent::output()
{
cout<<m_name<<" "<<m_age<<endl;
}
//定义对象
void main()
{
//无参的调用
/* CStudent stu1;
stu1.output();
CStudent stu2("Tom",23);
stu2.output();
stu2.initialize("JIM",44);
stu2.output();
*/
//数组的使用和初始化
/* CStudent stu[3];
CStudent stu[3]={
CStudent(),CStudent("Crystal",21),CStudent()
};
for(int i=0;i<3;i++)
{
stu[i].output();
}
*/
//指针的使用和初始化
/* CStudent stu;
CStudent *p = &stu;
p->output();
(*p).output();
*/
//引用的使用
/* CStudent stu("Tom",32);
CStudent &alias_stu = stu;
alias_stu.output();
*/
//动态分配内存,动态分配数组
CStudent *p = new CStudent;
p->output();
delete p;
CStudent *q = new CStudent[2];
q[0].initialize("Jim",22);
q[1].initialize("Lily",16);
q[0].output();
q[1].output();
delete []q;
}
第十九讲 实验 八
掌握拷贝函数的使用方法
声明拷贝构造函数
名字和类名相同
只有一个参数
是一个CStudent类的引用
因为能过拷贝构造函数在一个已知的对象赋值给另一个对象
#include <iostream.h>
#include <string.h>//strcpy head file
class CStudent
{
public:
CStudent(); //构造函数一定和它的类名字是一样的
CStudent(char *name,int age); //可以和成员变量区分开来
CStudent(const CStudent &student);//拷贝构造函数
~CStudent();
void initialize(char *name,int age); //赋值
void output(); //输出类对象
private:
//char m_name[20];
//int m_age;
char name[20];
int age;
};
//习惯在成员变量前面加上m_表示成员变量,以区分
//实现
CStudent::CStudent() //类很多,要用域操作符表明属于哪一个类
{
strcpy(name,"");
age = 0;
} //构造函数就是对数据成员进行初始化
CStudent::CStudent(char *name,int age)
{
strcpy(this->name,name);
this->age = age; //从形参传递过来
} //实现两个构造函数
//以上数据成员用_标示了出来,如果使用this指针的话可以用this-
>age=age来实现
void CStudent::initialize(char *name,int age)
{ strcpy(this->name,name);
this->age = age;
}
//析构函数的实现
CStudent::~CStudent()
{
cout<<"the object is deconstructing"<<endl;//作为析构的
标记
}
CStudent::CStudent(const CStudent &student)
{
strcpy(this->name,student.name);
this->age = student.age;
}
void CStudent::output()
{
cout<<name<<" "<<age<<endl;
}
//定义对象
void main()
{
//无参的调用
/* CStudent stu1;
stu1.output();
CStudent stu2("Tom",23);
stu2.output();
stu2.initialize("JIM",44);
stu2.output();
*/
//数组的使用和初始化
/* CStudent stu[3];
CStudent stu[3]={
CStudent(),CStudent("Crystal",21),CStudent()
};
for(int i=0;i<3;i++)
{
stu[i].output();
}
*/
//指针的使用和初始化
/* CStudent stu;
CStudent *p = &stu;
p->output();
(*p).output();
*/
//引用的使用
/* CStudent stu("Tom",32);
CStudent &alias_stu = stu;
alias_stu.output();
*/
//动态分配内存,动态分配数组
/* CStudent *p = new CStudent;
p->output();
delete p;
CStudent *q = new CStudent[2];
q[0].initialize("Jim",22);
q[1].initialize("Lily",16);
q[0].output();
q[1].output();
delete []q;
*/
//拷贝函数
CStudent stu1("JIM",22);
CStudent stu2(stu1);
stu1.output();
stu2.output();
}
预习
友元函数
静态成员变量