编程语言
首页 > 编程语言> > 复试导师问题——程序语言(c\c++)

复试导师问题——程序语言(c\c++)

作者:互联网

c++

为什么析构函数要用虚函数

https://www.cnblogs.com/howo/p/8531449.html

析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。

虚函数:其实就是变成指针

	//函数前面加上virtual关键字,变成虚函数,那么编译器在编译的时候就不能确定函数调用了。
	virtual void speak()
	{
		cout << "动物在说话" << endl;
	}

虚析构和纯虚析构

问题

其他延伸

为什么无法调用子类代码

多态满足条件

子类继承父类后,当创建子类对象,也会调用父类的构造函数

构造函数在创建对象的时候调用,先调用父类,再子类,析构相反

(1)当父类的指针new一个子类的对象时,

父类析构不是虚析构,则delete的时候不调用子类的,只是调用父类的析构函数,如果是virtual的析构函数,则先子类之后父类

(2)当子类的指针new一个子类的对象时,构造析构都会调用父类

c/c++ 堆区程序员分配的内存,不释放,在程序结束时,系统一定会回收内存吗?

类中只要有一个纯虚函数就称为抽象类
//抽象类无法实例化对象
//子类必须重写父类中的纯虚函数,否则也属于抽象类

内存泄漏

深拷贝与浅拷贝

所谓拷贝就是平常意义的复制,至于深浅,就因为一个东西:指针拷贝的时候,如果有指针,那么也就是对指针的拷贝,指针怎么拷贝?指针本质也就是一个存储地址的整形,所以拷贝的时候,也就是把指针本身进行复制,这样就导致一个问题:本体与复制体的指针成员实际是一个值(地址值),那么他们会操作同一个地址的内存内容,在析构的时候,就出现问题了,本体或者复制体进行析构的时候,将指针成员kill了,即把指针成员对应的地址内容kill掉了,那么另外一个复制体或者本体的指针成员怎么办????野指针啊!

++i 与i++

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IwG7tfjh-1617287029349)(C:\Users\wangxiaobing\AppData\Roaming\Typora\typora-user-images\image-20210315185239494.png)]

全局变量和局部变量在内存中是否有区别?如果有是什么区别?

引用与指针有什么区别

面向过程面向对象

举例 :五子棋

举例:洗衣服

优缺点
面向过程

面向对象

Union

https://www.runoob.com/cprogramming/c-unions.html

#include <stdio.h>
#include <string.h>
 
union Data
{
   int i;
   float f;
   char  str[20];
};
 
int main( )
{
   union Data data;        
 
   data.i = 10;
   data.f = 220.5;
   strcpy( data.str, "C Programming");
 
   printf( "data.i : %d\n", data.i);
   printf( "data.f : %f\n", data.f);
   printf( "data.str : %s\n", data.str);
 
   return 0;
}

data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming

在这里,我们可以看到共用体的 if 成员的值有损坏,因为最后赋给变量的值占用了内存位置,这也是 str 成员能够完好输出的原因。

const修饰成员函数

常函数:

常对象:

常数据成员

标签:函数,对象,子类,c++,复试,程序语言,内存,data,指针
来源: https://blog.csdn.net/weixin_41413511/article/details/115386741