构造函数错了,不是析构函数错了,看下面:
创新互联专注于企业营销型网站建设、网站重做改版、双滦网站定制设计、自适应品牌网站建设、H5建站、购物商城网站建设、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为双滦等各大城市提供网站开发制作服务。
#include iostream // 包含头文件iostream
using namespace std; // 使用命名空间std
class Course
{
public:
Course(int pId, char* pName, int pHours, char* pTeacherInCharge);
void printCourse();
~Course();
private:
int id;
char *name;
int hours;
char *teacherInCharge;
};
Course::Course(int pId, char* pName, int pHours, char* pTeacherInCharge)
{
id=pId;
hours=pHours;
name= new char[strlen(pName)+1];
if (name !=NULL) strcpy(name,pName);//name=pName;
teacherInCharge= new char[strlen(pTeacherInCharge)+1];
if(teacherInCharge!=NULL) strcpy(teacherInCharge,pTeacherInCharge);//teacherInCharge=pTeacherInCharge;
}
void Course::printCourse()
{
cout"ID ""NAME ""HOURS ""TEACHINCHARGE "endl;
coutidname hoursteacherInChargeendl;
}
Course::~Course()
{
cout"destructing……"endl;
delete[] name;
delete[] teacherInCharge;
}
int main ()
{
Course c[3]={Course(0001,"lili",36,"zhangsan"),Course(0002,"sary",36,"wanger"),Course(0003,"mary",36,"zhaoqian")};
for (int i=0;i3;i++)
c[i].printCourse();
return 0;
}
C语言是面向过程的编程语言,构造函数和析构函数是用在面向对象的编程语言里的。所以C里面是没有析构函数的!
构造函数是一种用于创建对象的特殊函数,当创建对象是,系统自动调用构造函数,不能在程序中直接调用.
构造函数名与类名相同,一个类可以拥有多个构造函数(重载),构造函数可以有任意类型的参数,但不能具有返回类型!
构造函数的作用是:为对象分配空间;对数据成员赋初值;请求起他资源.
析构函数作用是清除对象,释放内存等
类是编程人员表达自定义数据类型的C++机制。它和C语言中的结构类似,C++类
支持数据抽象和面向对象的程序设计,从某种意义上说,也就是数据类型的设
计和实现。
那么
String
类的原型如下
class
String
{
public:
String(const
char
*str=NULL);
//构造函数
String(const
String
other);
//拷贝构造函数
~String(void);
//析构函数
String
operator=(const
String
other);
//等号操作符重载,赋值函数
ShowString();
private:
char
*m_data;
//字符指针
};
String::~String()
{
delete
[]
m_data;
//析构函数,释放地址空间
}
String::String(const
char
*str)
{
if
(str==NULL)//当初始化串不存在的时候,为m_data申请一个空间存放'/0';
{
m_data=new
char[1];
*m_data='/0';
}
else//当初始化串存在的时候,为m_data申请同样大小的空间存放该串;
{
int
length=strlen(str);
m_data=new
char[length+1];
strcpy(m_data,str);
}
}
String::String(const
String
other)//拷贝构造函数,功能与构造函数类似。
{
int
length=strlen(other.m_data);
m_data=new
[length+1];
strcpy(m_data,other.m_data);
}
String
String::operator
=(const
String
other)
//赋值函数
{
if
(this==other)//当地址相同时,直接返回;
return
*this;
delete
[]
m_data;//当地址不相同时,删除原来申请的空间,重新开始构造;
int
length=sizeof(other.m_data);
m_data=new
[length+1];
strcpy(m_data,other.m_data);
return
*this;
}
String::ShowString()//由于m_data是私有成员,对象只能通过public成员函数来访问;
{
coutthis-m_dataendl;
}
测试一下:
main()
{
String
AD;
char
*
p="ABCDE";
String
B(p);
AD.ShowString();
AD=B;
AD.ShowString();
}
c++ 析构函数调用时间:
1、对象生命周期结束,被销毁时;
2、delete指向对象的指针时,或delete指向对象的基类类型指针,而其基类虚构函数是虚函数时;
3、对象i是对象o的成员,o的析构函数被调用时,对象i的析构函数也被调用。
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
扩展资料:
C++语言特点:
1、支持继承和重用
在C++现有类的基础上可以声明新类型,这就是继承和重用的思想。通过继承和重用可以更有效地组织程序结构,明确类间关系,并且充分利用已有的类来完成更复杂、深入的开发。新定义的类为子类,成为派生类。它可以从父类那里继承所有非私有的属性和方法,作为自己的成员。
2、支持多态性
采用多态性为每个类指定表现行为。多态性形成由父类和它们的子类组成的一个树型结构。在这个树中的每个子类可以接收一个或多个具有相同名字的消息。当一个消息被这个树中一个类的一个对象接收时,这个对象动态地决定给予子类对象的消息的某种用法。多态性的这一特性允许使用高级抽象。
继承性和多态性的组合,可以轻易地生成一系列虽然类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征。由于多态性,一个对象可有独特的表现方式,而另一个对象有另一种表现方式。
参考资料来源:百度百科-C++