面试题小结:
1、指针与引用的区别?
(1)指针指向的是变量的地址,而引用是指向变量本身;
(2)指针可以有多级指针,而引用只有一级引用;
(3)指针可以不初始化,但是引用必须初始化;
(4)指针可以改变指向,但是引用初始化后就不能更改对象;
(5)指针用const修饰时可以修饰指针指向和指向的内容,但引用只能修饰变量的值;
(6)没有引用数组,但是有数组引用;
(7)指针在分配时需要额外分配8bit空间,而引用不需要分配;
(8)指针在使用时需要解引用,而引用是直接使用。
2、malloc、free、new、delete区别
(1)malloc和free是以字节为单位向堆区申请空间,而new和delete是以数据类型为单位;
(2)malloc和free是库函数,而new和delete是关键字;
(3)malloc和free的返回值是void*类型的万能指针,而new和delete返回的是设置的数据类型;
(4)malloc申请时不能进行初始化,而new申请可以进行初始化;
(5)new申请空间时会调用构造函数,malloc不会
(6)delete释放空间时,会调用析构函数,free不会
3、C++中const的使用
const最核心的使用原理是保护;
(1)修饰常量:表示修饰的常量不能进行修改;
(2)修饰指针:可以修饰指针本身(指针指向)也可以修饰指向的内容;
(3)修饰函数:修饰函数的参数和返回值时,是为了保护传参和返回值,防止被修改;
(4)修饰成员变量时表示不能被访问和修改;
4、什么是回调函数?
回调函数通过函数指针来实现,通过传递函数地址,用函数指针来接受函数地址,再通过函数参数类型,来完成回调函数,在回调函数的使用中可以大大提高编程的效率,常接触到的回调函数有创建线程时构造的线程体,其本质也是回调函数。
5、函数重载的相关内容
函数重载的使用是为了达到一名多用的目的,但是其参数列表必须不同,函数名相同,且在同一个作用域下,函数重载和返回值没有关系。
6、谈谈对面向对象的特征
首先,面向对象有三大特征:封装、继承、多态(抽象),面向对象的概念就是将一个事物的所有行为和属性等万事万物都封装起来,我们称之为类,并在类中提供公共接口,用户可以通过公共接口来完成对该类实例化对象的操作。
作业:
1、
封装一个结构体,结构体中包含一个私有数组,用来存放学生的成绩,包含一个私有变量,用来记录学生个数,
提供一个公有成员函数,void setNum(int num)用于设置学生个数
提供一个公有成员函数:void input(),用来对所有学生的成绩进行输入工作
提供一个公有成员函数:void sort(),用来实现对存储的学生成绩进行降序排序
提供一个公有的成员函数:void show(),用于将所有学生的成绩展示出来
在主程序中,完成相关函数的调用
#include <iostream>
using namespace std;
struct Data{
private:
double arr[50];
private:
int num;
public:
void setNum(int num)
{
this->num = num;
/*
cout<<"请输入学生个数"
cin>>num;
*/
}
public:
void input()
{
for(int i=0;i<num;i++)
{
cout<<"请输入第"<<i+1<<"个学生的成绩:";
cin>>arr[i];
}
}
public:
void sort()
{
for(int i=1;i<num;i++)
{
for(int j=1;j<num;j++)
{
if(arr[j]>arr[j-1])
{
double temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
}
public:
void show()
{
cout<<"学生成绩从高到低依次为:";
for(int i=0;i<num;i++)
{
if(0==i)
{
cout<<arr[i];
continue;
}
cout<<" "<<arr[i];
}
cout<<endl;
}
};
int main()
{
Data a;
int num;
cout<<"请输入学生个数:";
cin >> num;
a.setNum(num);
a.input();
a.sort();
a.show();
return 0;
}
2、思维导图:有道云笔记