A. c语言中,“类”中的构造函数和析构函数,树上的解释我看了,不明不白,求应用。
首先,类是C++中的,C语言只有结构体。当你定义了一个类类型的对象时,需要对这个对象中的数据成员初始化,这就是构造函数的作用;当这个类的对象生命周期结束时,需要释放相关内存啊之类的,这就是析构函数的作用。具体的例子可以参考我的博客:
关于构造函数:http://blog.csdn.net/thefutureisour/article/details/7705665
关于析构函数:http://blog.csdn.net/thefutureisour/article/details/7708964
B. C 中析构函数的符号怎么打
就键盘数字1前面的那个,按住 shift,再按
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=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成员函数来访问;
{
cout<<this->m_data<<endl;
}
测试一下:
main()
{
String
AD;
char
*
p="ABCDE";
String
B(p);
AD.ShowString();
AD=B;
AD.ShowString();
}
D. c++ 析构函数 是在什么时候执行
c++ 析构函数调用时间:
1、对象生命周期结束,被销毁时;
2、delete指向对象的指针时,或delete指向对象的基类类型指针,而其基类虚构函数是虚函数时;
3、对象i是对象o的成员,o的析构函数被调用时,对象i的析构函数也被调用。
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
(4)c语言析构函数扩展阅读:
C++语言特点:
1、支持继承和重用
在C++现有类的基础上可以声明新类型,这就是继承和重用的思想。通过继承和重用可以更有效地组织程序结构,明确类间关系,并且充分利用已有的类来完成更复杂、深入的开发。新定义的类为子类,成为派生类。它可以从父类那里继承所有非私有的属性和方法,作为自己的成员。
2、支持多态性
采用多态性为每个类指定表现行为。多态性形成由父类和它们的子类组成的一个树型结构。在这个树中的每个子类可以接收一个或多个具有相同名字的消息。当一个消息被这个树中一个类的一个对象接收时,这个对象动态地决定给予子类对象的消息的某种用法。多态性的这一特性允许使用高级抽象。
继承性和多态性的组合,可以轻易地生成一系列虽然类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征。由于多态性,一个对象可有独特的表现方式,而另一个对象有另一种表现方式。
参考资料来源:网络-C++
E. C++ 析构函数
搞清楚这个问题,就要搞清楚默认析构函数的作用,是释放类内定义的成员的内存。
C类定义了一个成员,类型是指针,C类的析构函数会释放指针本身,即是一个指针所占的内存。而不是指针指向的内存。其实道理跟类里面定义一个int,会释放一个int所占内存一样。
而指针指向的内存就跟这个C类一点关系没有,至于是否释放,需要不需要释放,就回到了最原始的问题了:
1,区域是用new创建的,要delete
2,区域是用C c 这种形式创建的不需要。
F. c语言中的构造函数和析构函数的异同点
构造函数是一种用于创建对象的特殊函数,当创建对象是,系统自动调用构造函数,不能在程序中直接调用.
构造函数名与类名相同,一个类可以拥有多个构造函数(重载),构造函数可以有任意类型的参数,但不能具有返回类型!
构造函数的作用是:为对象分配空间;对数据成员赋初值;请求起他资源.
析构函数作用是清除对象,释放内存等
G. 每个c 类只有一个析构函数,但可以有多个构造函数和多个赋值函数
说法正确。
析构函数是自动调用的,不存在重载的可能,所以只有一个析构。
而构造和赋值,可以根据传入参数进行重载,所以可以有多个。
H. C/C++析构函数
析构函数的作用是对类对象进行内存回收(即声明了该内存空间可以被其他程序使用了!),显示调用析构函数只会执行你设计的析构函数的功能(也就是上诉括号里的,声明被析构成员的内存空间可以被其他程序所使用了。),但是不会真正意义上析构掉对象,要析构掉对象,只有当且仅当对象的生命周期结束时,由系统操作系统回收对象的内存!这同其他的变量一样,当生命周期结束时,才会被回收内存空间!
另外,为什么显示调用析构函数后,能然可以访问被析构了的类成员呢?(假如你的类中有个使用malloc分配空间的成员,然后析构函数中使用free掉他。)因为,free的作用是声明该内存空间可以被其他程序所用,而不是隔断变量地址至物理内存的映射(程序虚拟内存空间至物理内存空间的映射),即这种映射关系并不会因为free的影响而断开,所以free后能然访问那片内存空间,但是实际上,那片内存空间已经不是你的程序所私有的了,而是被系统标记为未分配出去的空间。
所以综上所述,调用了析构函数后,却能然可以访问被析构了的成员这个假象造成了我们认为显示调用析构函数没用!
以上的观点属于个人结论,而且现在没有机器做实验,不知道说的是对是错,请楼主自行斟酌。