c语言中析构函数 c++中析构函数

c语言中的~是什么?~ 英文符号叫Tilde , 意思是颚化符号,鼻音化符号,代字号,中文俗称波浪号 。
波浪号形式上有三种,一种是居于格子中间 , 如“~ ”;一种是居于格子上方,如问题中的位置;一种是大波浪 , 比前一种符号要大些,如“~” 。
扩展资料:
C语言中,析构函数名也应与类名相同,只是在函数名前面加一个波浪符~,例如~stud( ) , 以区别于构造函数 。它不能带任何参数,也没有返回值(包括void类型) 。
只能有一个析构函数,不能重载 。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数 , 它也不进行任何操作 。所以许多简单的类中没有用显式的析构函数 。
C/C语言中 , ~又是一种运算符-二进制的“按位非”运算符 。例如int x = 0x79; 写成二进制01111001;~x运算结果是10000110 。也就是说:某位是1,就变0,是0,就变1 。
参考资料来源:百度百科-~
C语言析构函数问题构造函数错c语言中析构函数了c语言中析构函数,不是析构函数错了c语言中析构函数 , 看下面:
#include iostream// 包含头文件iostream
using namespace std;// 使用命名空间std
class Course
{
public:
Course(int pId, char* pName, int pHours, char* pTeacherInCharge);
void printCourse();
~Course();
private:
intid;
char *name;
inthours;
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析构函数调用时间:
1、对象生命周期结束,被销毁时;
2、delete指向对象的指针时,或delete指向对象的基类类型指针 , 而其基类虚构函数是虚函数时;
3、对象i是对象o的成员,o的析构函数被调用时 , 对象i的析构函数也被调用 。
C是C语言的继承,它既可以进行C语言的过程化程序设计 , 又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计 。C擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C就适应的问题规模而论,大小由之 。
C不仅拥有计算机高效运行的实用性特征 , 同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力 。
扩展资料:
C语言特点:
1、支持继承和重用
在C现有类的基础上可以声明新类型 , 这就是继承和重用的思想 。通过继承和重用可以更有效地组织程序结构,明确类间关系,并且充分利用已有的类来完成更复杂、深入的开发 。新定义的类为子类,成为派生类 。它可以从父类那里继承所有非私有的属性和方法,作为自己的成员 。
2、支持多态性
采用多态性为每个类指定表现行为 。多态性形成由父类和它们的子类组成的一个树型结构 。在这个树中的每个子类可以接收一个或多个具有相同名字的消息 。当一个消息被这个树中一个类的一个对象接收时,这个对象动态地决定给予子类对象的消息的某种用法 。多态性的这一特性允许使用高级抽象 。
继承性和多态性的组合,可以轻易地生成一系列虽然类似但独一无二的对象 。由于继承性,这些对象共享许多相似的特征 。由于多态性,一个对象可有独特的表现方式,而另一个对象有另一种表现方式 。
参考资料来源:百度百科-C
c语言中的构造函数和析构函数的异同点构造函数是一种用于创建对象c语言中析构函数的特殊函数,当创建对象是,系统自动调用构造函数,不能在程序中直接调用.
构造函数名与类名相同,一个类可以拥有多个构造函数(重载),构造函数可以有任意类型c语言中析构函数的参数,但不能具有返回类型!
构造函数的作用是:为对象分配空间;对数据成员赋初值;请求起c语言中析构函数他资源.
析构函数作用是清除对象,释放内存等
如何用c语言实现CString的构造函数,析构函数和赋值函数类是编程人员表达自定义数据类型的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=https://www.04ip.com/post/new
char[1];
*m_data='https://www.04ip.com/0';
}
else//当初始化串存在的时候,为m_data申请同样大小的空间存放该串;
{
int
length=strlen(str);
m_data=https://www.04ip.com/post/new
char[length 1];
strcpy(m_data,str);
}
}
String::String(const
String
other)//拷贝构造函数,功能与构造函数类似 。
{
int
length=strlen(other.m_data);
m_data=https://www.04ip.com/post/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=https://www.04ip.com/post/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中什么时候调用构造函数和析构函数在对象被创建的时候就会调用构造函数,比如 声明一个类class A{...},当你在main函数中
A a ; 定义一个对象a的时候 , 就调用构造函数,默认构造函数都是无参数的,构造函数就相当给对象a初始化而已,就相当于c语言中 int a= 3 初始化a的值而已,以为你在类中是不能直接给private中的类成员赋值的,所以就靠构造函数 , 不过要注意有参构造和无参构造,默认都是无参的,比如你A a(1, 3)这样的就不对了 除非你在类中写一个带参数的构造函数 。
当函数调用结束的时候,会自动调用析构函数,比如你在clsaa A { public:Add().....},
当你A a; a.Add();后 就自动调用析构,你可以在类中 ~A{cout 。。。} , 你就会发现调用
a.Add() 后就打出你在析构函数中写的东西,是自动调用的,析构的作用就是释放对象占用的资源 。以为默认析构什么也不打印 , 所以你不会直观看出析构函数什么时候执行,自己在析构中加上打印的语言你就会看到了 。希望对你能有所帮助
【c语言中析构函数 c 中析构函数】关于c语言中析构函数和c中析构函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读