一、指针
二、c++语言编程基础
(1)内存动态分配和释放
①填空:用new和delete动态分配和释放:100-109
#include
using namespace std;
void test()
{
//在此填空 答案:int* arr = new int[10];
for (int i = 0; i < 10; i++)
{
arr[i] = i + 100;
}
for (int i = 0; i < 10; i++)
{
cout << arr[i] << endl;
}
//在此填空 答案:delete[]arr;
}
int main()
{
test();
}
(2)引用
1.基本语法与注意事项
①判断题:函数引用不需要进行初始化
答案:错误
知识点:引用的基本概念,函数引用时必须要初始化
②填空题:引用的本质是______?
答案:指针常量
知识点:引用的本质
2.引用做函数参数
①填空题:要求实现a与b值交换(a=20,b=10)
void mySwap(//在此输入 , //在此输入) 答案:int &a,int &b
{
//在此输入 答案:int temp = a;
//在此输入 答案:a = b;
//在此输入 答案:b = temp;
}
int main()
{
int a = 10;
int b = 20;
mySwap(a,b);
cout << "a=" << a << endl;
cout << "b=" << b << endl;
}
知识点:函数引用的引用传递,形参会修饰实参,即值会发生改变
②填空题: 写出下列代码输出的值
#include
using namespace std;
void func(int *pnum)
{
(*pnum)++;
}
int main()
{
int value = 5;
func(&value);
cout << value;
system("pause");
return 0;
}
答案:6
知识点:书本例题p195,7-2。函数引用的地址传递,形参会修饰实参,即值会发生改变
③填空题:写出下列代码输出的值
#include
using namespace std;
void func(int num)
{
num++;
}
int main()
{
int value = 5;
func(value);
cout << value;
system("pause");
return 0;
}
答案:5
知识点:书本例题p194,7-1。函数引用的值传递,形参不会修饰实参,即值不会发生改变。
3.引用做函数返回值
①选择题:阅读以下代码,选择正确的选项
int &test()
{
int a = 10;
return a;
}
int main()
{
int& ref = test();
cout << ref << endl; //记为①
cout << ref << endl; //记为②
system("pause");
}
A.①输出的值为10 B.②输出的值为10 C.①②输出的为随机值 D.①②输出的值都为10
答案:A。
知识点:局部变量的引用不能返回,①输出为10因为编译器做了保留。②输出时编译器已经释放,输出的为随机值
(3)函数重载
1.基本概念
①判断题:函数重载主要以形参名字或者函数返回类型不同来区分不同函数
答案:错误
知识点:书本p197,注意不能以形参名字或者函数返回类型不同来区分不同函数
②判断题:函数重载的函数参数类型(或者个数、顺序)可以相同
答案:错误
知识点:函数重载必须函数参数类型不同(或者个数不同、顺序不同)
③判断题:下列代码会报错
void func(int a,int b) {}
int func(int a,int b){}
答案:正确
知识点:函数的返回值不可以作为函数重载的条件
④填空题:请填写下列代码中主函数调用的函数
int add(int x, int y){}
float add(float x,float y){}
int add(int x,int y,int z){}
int add(int a,double b){}
int add(double a,int b){}
int main()
{
int a, b, c;
float f1, f2;
add(a, b); //在此输入 答案:调用int add(int x, int y){}
add(a, b, c); //再次输入 答案:调用int add(int x,int y,int z){}
add(f1, f2); //在此输入 答案:调用float add(float x,float y){}
add(a,f1) //在此输入 答案:调用int add(int a,double b){}
add(f1,a) //在此输入 答案:调用int add(double a,int b){}
system("pause");
return 0;
}
答案:见代码
知识点:书本代码改编,p197,函数重载必须函数参数类型不同(或者个数不同、顺序不同)
(4)函数的默认参数
①选择题:请选出下列代码中会报错的一项
A.
int func2(int a, int b, int c)
{
return a + b + c;
}
B.
int func2(int a=0, int b, int c)
{
return a + b + c;
}
C.
int func2(int a, int b, int c=0)
{
return a + b + c;
}
D.
int func2(int a=0, int b=0, int c=0)
{
return a + b + c;
}
答案:B
知识点:如果形参列表某个位置已经有了默认参数,那么从这个位置往后从左往右都必须有默认值
②判断题:以下这段代码输出会报错
int func(int a = 10, int b = 10);
int func(int a = 10, int b = 10)
{
return a + b;
}
int main()
{
cout << func(10, 10) << endl;
system("pause");
return 0;
}
答案:正确
知识点:函数声明和实现只能有一个有默认参数
③填空题:请写出下列代码的运行结果
#include
using namespace std;
int func(int a = 5, int b = 6)
{
return a + b;
}
int main()
{
int ref;
ref = func(10, 20);
cout << ref << endl;
ref = func(10,30);
cout << ref << endl;
ref = func();
cout << ref << endl;
system("pause");
return 0;
}
答案:30,40,11
知识点:在定义函数时预先声明默认的形参值。调用时如果给出实参则用实参初始化形参,否则采用预先声明的默认形参
④选择题:请阅读以下代码,选出cout输出的值()
int add(int x, int y)
{
return x + y;
}
int add(int x, int y, int z=2)
{
return x + y + z;
}
int main()
{
int ret;
ret = add(10, 20);
cout << ret << endl;
system("pause");
return 0;
}
A.30 B.32 C.会报错 D.以上都不是
答案:C
知识点:书本示例代码p199上方。编译该程序会报错,因为ret=add(10,20)函数无法确认匹配哪个函数。即带默认形参值得函数与不带默认形参值得重载函数可能会出现编译错误
三、类与对象
(1)类的声明与实现
①简答题:请设计一个类计算圆的面积(圆周率为3.14,半径为10)
//在此声明类
//在此输入访问权限
//在此输入属性
//在此输入行为
int main()
{
//在此创建对象
//在此进行输出
}
答案:如下
#include
using namespace std;
//设计一个圆类
//圆求周长的公式:2*pi*半径
const double pi = 3.1415926; //圆周率
class Circle //圆类
{
//访问权限(公共权限)
public:
//属性(半径)
int r;
//行为(获取圆的周长)
double calculate()
{
return 2 * pi * r;
}
};
int main()
{
//通过圆类创建具体的圆(对象)
Circle c1; //c1为clrcle类中实例化的一个对象
c1.r = 10; //给圆对象的属性进行赋值
cout << "圆的周长为" << c1.calculate() << endl; //通过对象c1调用函数
}
知识点:类的声明与实现和访问权限的基础知识
(2)访问权限(class与struct的区别)
①选择题:请阅读以下代码,选出会报错的一项
class One
{
int m_A;
public:
int m_B;
};
struct Two
{
int m_C;
};
int main()
{
One c1;
Two c2;
c1.m_A = 100;
c1.m_B = 100;
c2.m_C = 100;
system("pause");
}
A.c1.m_A = 100; B.c1.m_B = 100; C.c2.m_C = 100; D.都不会
答案:A
知识点:public属于公共权限,类内类外都可以访问;struct与class的区别在于默认访问权限不同,struct默认公共权限,class默认私有权限
(3)数据封装
①综合编程题:请运用数据封装的原理,设计一个立方体类,分别计算立方体体积,并判断两个立方体的体积是否相等(要求类中至少包含:设置长宽高函数、获取长宽高函数、计算体积函数、判断体积是否相等函数)
答案:如下(参考,不唯一)
#include
using namespace std;
class Cube
{
public:
//行为
// 设置并获取立方体长宽高
int setL(int L)
{
m_L = L;
return m_L;
}
int setW(int W)
{
m_W = W;
return m_W;
}
int setH(int H)
{
m_H = H;
return m_H;
}
//计算立方体的体积
int calculateV()
{
return m_L * m_W * m_H;
}
//判断两个立方体体积是否相等
void compareV(int V1, int V2)
{
if (V1 == V2)
{
cout << "两个立方体体积相等" << endl;
}
else
{
cout << "两个立方体体积不相等" << endl;
}
}
private:
//属性
//长宽高
int m_L;
int m_H;
int m_W;
};
int main()
{
Cube c1,c2; //实例化两个具体立方体对象c1,c2
c1.setL(10); //c1长为10
c1.setW(10); //c1宽为10
c1.setH(10); //c1高为10
c2.setL(20); //c2长为20
c2.setW(20); //c2宽为20
c2.setH(20); //c2高为20
cout << "c1体积为:" << c1.calculateV() << endl;
cout << "c2体积为:" << c2.calculateV() << endl;
c1.compareV(c1.calculateV(), c2.calculateV());
}
知识点:类与对象的声明与实现、数据封装的原理。
(4)构造函数和析构函数
①判断题:构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
答案:正确
知识点:书本知识点p125,例8-3下面。
②判断题:析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程序员手动添加,否则可能造成内存泄漏。
答案:错误
知识点:书本知识点p125,8.5上方。构造和析构都是必须有的实现,但是如果我们不提供,编辑器会自动生成(表现为空实现)
③判断题:构造函数和析构函数都可以发生重载
答案:错误
知识点:构造函数有参数,可以发生重载;析构函数没有参数,不可以发生重载
④判断题:构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:错误
知识点:书本知识点p227,在类外调用函数时构造函数必须是public属性
⑤选择题:选出下面四个选择项中正确的一项()
A.构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
B.析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程 序员手动添加,否则可能造成内存泄漏。
C.构造函数和析构函数都可以发生重载
D.构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:A
知识点:见上
(5) this指针
①判断题:对于程序员来说,在编写非静态成员函数时不能显式声明名为this的形参,也不能修改this指针,只能通过this去访问相应对象的数据成员
答案:正确
知识点:书本p223注意
②:判断题:this指针可以在成员函数和静态函数中使用
答案:错误
知识点:同上,编写非静态成员函数
(6)静态成员
①判断题:静态数据成员和静态成员函数需要在类内声明、定义及初始化
答案:错误
知识点:书本p226注意:在类内知识声明静态数据成员,而需要在类外定义及初始化静态数据成员
(7)友元机制
①综合编程题:请设计一个建筑类(Building):要求在公共属性中定义一个客厅(m_SittingRoom),私有属性中定义一个卧室(m_BedRoom),
四、继承、派生与多态
五、运算符重载
六、虚函数
(1)内存动态分配和释放
①填空:用new和delete动态分配和释放:100-109
#include
using namespace std;
void test()
{
//在此填空 答案:int* arr = new int[10];
for (int i = 0; i < 10; i++)
{
arr[i] = i + 100;
}
for (int i = 0; i < 10; i++)
{
cout << arr[i] << endl;
}
//在此填空 答案:delete[]arr;
}
int main()
{
test();
}
(2)引用
1.基本语法与注意事项
①判断题:函数引用不需要进行初始化
答案:错误
知识点:引用的基本概念,函数引用时必须要初始化
②填空题:引用的本质是______?
答案:指针常量
知识点:引用的本质
2.引用做函数参数
①填空题:要求实现a与b值交换(a=20,b=10)
void mySwap(//在此输入 , //在此输入) 答案:int &a,int &b
{
//在此输入 答案:int temp = a;
//在此输入 答案:a = b;
//在此输入 答案:b = temp;
}
int main()
{
int a = 10;
int b = 20;
mySwap(a,b);
cout << "a=" << a << endl;
cout << "b=" << b << endl;
}
知识点:函数引用的引用传递,形参会修饰实参,即值会发生改变
②填空题: 写出下列代码输出的值
#include
using namespace std;
void func(int *pnum)
{
(*pnum)++;
}
int main()
{
int value = 5;
func(&value);
cout << value;
system("pause");
return 0;
}
答案:6
知识点:书本例题p195,7-2。函数引用的地址传递,形参会修饰实参,即值会发生改变
③填空题:写出下列代码输出的值
#include
using namespace std;
void func(int num)
{
num++;
}
int main()
{
int value = 5;
func(value);
cout << value;
system("pause");
return 0;
}
答案:5
知识点:书本例题p194,7-1。函数引用的值传递,形参不会修饰实参,即值不会发生改变。
3.引用做函数返回值
①选择题:阅读以下代码,选择正确的选项
int &test()
{
int a = 10;
return a;
}
int main()
{
int& ref = test();
cout << ref << endl; //记为①
cout << ref << endl; //记为②
system("pause");
}
A.①输出的值为10 B.②输出的值为10 C.①②输出的为随机值 D.①②输出的值都为10
答案:A。
知识点:局部变量的引用不能返回,①输出为10因为编译器做了保留。②输出时编译器已经释放,输出的为随机值
(3)函数重载
1.基本概念
①判断题:函数重载主要以形参名字或者函数返回类型不同来区分不同函数
答案:错误
知识点:书本p197,注意不能以形参名字或者函数返回类型不同来区分不同函数
②判断题:函数重载的函数参数类型(或者个数、顺序)可以相同
答案:错误
知识点:函数重载必须函数参数类型不同(或者个数不同、顺序不同)
③判断题:下列代码会报错
void func(int a,int b) {}
int func(int a,int b){}
答案:正确
知识点:函数的返回值不可以作为函数重载的条件
④填空题:请填写下列代码中主函数调用的函数
int add(int x, int y){}
float add(float x,float y){}
int add(int x,int y,int z){}
int add(int a,double b){}
int add(double a,int b){}
int main()
{
int a, b, c;
float f1, f2;
add(a, b); //在此输入 答案:调用int add(int x, int y){}
add(a, b, c); //再次输入 答案:调用int add(int x,int y,int z){}
add(f1, f2); //在此输入 答案:调用float add(float x,float y){}
add(a,f1) //在此输入 答案:调用int add(int a,double b){}
add(f1,a) //在此输入 答案:调用int add(double a,int b){}
system("pause");
return 0;
}
答案:见代码
知识点:书本代码改编,p197,函数重载必须函数参数类型不同(或者个数不同、顺序不同)
(4)函数的默认参数
①选择题:请选出下列代码中会报错的一项
A.
int func2(int a, int b, int c)
{
return a + b + c;
}
B.
int func2(int a=0, int b, int c)
{
return a + b + c;
}
C.
int func2(int a, int b, int c=0)
{
return a + b + c;
}
D.
int func2(int a=0, int b=0, int c=0)
{
return a + b + c;
}
答案:B
知识点:如果形参列表某个位置已经有了默认参数,那么从这个位置往后从左往右都必须有默认值
②判断题:以下这段代码输出会报错
int func(int a = 10, int b = 10);
int func(int a = 10, int b = 10)
{
return a + b;
}
int main()
{
cout << func(10, 10) << endl;
system("pause");
return 0;
}
答案:正确
知识点:函数声明和实现只能有一个有默认参数
③填空题:请写出下列代码的运行结果
#include
using namespace std;
int func(int a = 5, int b = 6)
{
return a + b;
}
int main()
{
int ref;
ref = func(10, 20);
cout << ref << endl;
ref = func(10,30);
cout << ref << endl;
ref = func();
cout << ref << endl;
system("pause");
return 0;
}
答案:30,40,11
知识点:在定义函数时预先声明默认的形参值。调用时如果给出实参则用实参初始化形参,否则采用预先声明的默认形参
④选择题:请阅读以下代码,选出cout输出的值()
int add(int x, int y)
{
return x + y;
}
int add(int x, int y, int z=2)
{
return x + y + z;
}
int main()
{
int ret;
ret = add(10, 20);
cout << ret << endl;
system("pause");
return 0;
}
A.30 B.32 C.会报错 D.以上都不是
答案:C
知识点:书本示例代码p199上方。编译该程序会报错,因为ret=add(10,20)函数无法确认匹配哪个函数。即带默认形参值得函数与不带默认形参值得重载函数可能会出现编译错误
三、类与对象
(1)类的声明与实现
①简答题:请设计一个类计算圆的面积(圆周率为3.14,半径为10)
//在此声明类
//在此输入访问权限
//在此输入属性
//在此输入行为
int main()
{
//在此创建对象
//在此进行输出
}
答案:如下
#include
using namespace std;
//设计一个圆类
//圆求周长的公式:2*pi*半径
const double pi = 3.1415926; //圆周率
class Circle //圆类
{
//访问权限(公共权限)
public:
//属性(半径)
int r;
//行为(获取圆的周长)
double calculate()
{
return 2 * pi * r;
}
};
int main()
{
//通过圆类创建具体的圆(对象)
Circle c1; //c1为clrcle类中实例化的一个对象
c1.r = 10; //给圆对象的属性进行赋值
cout << "圆的周长为" << c1.calculate() << endl; //通过对象c1调用函数
}
知识点:类的声明与实现和访问权限的基础知识
(2)访问权限(class与struct的区别)
①选择题:请阅读以下代码,选出会报错的一项
class One
{
int m_A;
public:
int m_B;
};
struct Two
{
int m_C;
};
int main()
{
One c1;
Two c2;
c1.m_A = 100;
c1.m_B = 100;
c2.m_C = 100;
system("pause");
}
A.c1.m_A = 100; B.c1.m_B = 100; C.c2.m_C = 100; D.都不会
答案:A
知识点:public属于公共权限,类内类外都可以访问;struct与class的区别在于默认访问权限不同,struct默认公共权限,class默认私有权限
(3)数据封装
①综合编程题:请运用数据封装的原理,设计一个立方体类,分别计算立方体体积,并判断两个立方体的体积是否相等(要求类中至少包含:设置长宽高函数、获取长宽高函数、计算体积函数、判断体积是否相等函数)
答案:如下(参考,不唯一)
#include
using namespace std;
class Cube
{
public:
//行为
// 设置并获取立方体长宽高
int setL(int L)
{
m_L = L;
return m_L;
}
int setW(int W)
{
m_W = W;
return m_W;
}
int setH(int H)
{
m_H = H;
return m_H;
}
//计算立方体的体积
int calculateV()
{
return m_L * m_W * m_H;
}
//判断两个立方体体积是否相等
void compareV(int V1, int V2)
{
if (V1 == V2)
{
cout << "两个立方体体积相等" << endl;
}
else
{
cout << "两个立方体体积不相等" << endl;
}
}
private:
//属性
//长宽高
int m_L;
int m_H;
int m_W;
};
int main()
{
Cube c1,c2; //实例化两个具体立方体对象c1,c2
c1.setL(10); //c1长为10
c1.setW(10); //c1宽为10
c1.setH(10); //c1高为10
c2.setL(20); //c2长为20
c2.setW(20); //c2宽为20
c2.setH(20); //c2高为20
cout << "c1体积为:" << c1.calculateV() << endl;
cout << "c2体积为:" << c2.calculateV() << endl;
c1.compareV(c1.calculateV(), c2.calculateV());
}
知识点:类与对象的声明与实现、数据封装的原理。
(4)构造函数和析构函数
①判断题:构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
答案:正确
知识点:书本知识点p125,例8-3下面。
②判断题:析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程序员手动添加,否则可能造成内存泄漏。
答案:错误
知识点:书本知识点p125,8.5上方。构造和析构都是必须有的实现,但是如果我们不提供,编辑器会自动生成(表现为空实现)
③判断题:构造函数和析构函数都可以发生重载
答案:错误
知识点:构造函数有参数,可以发生重载;析构函数没有参数,不可以发生重载
④判断题:构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:错误
知识点:书本知识点p227,在类外调用函数时构造函数必须是public属性
⑤选择题:选出下面四个选择项中正确的一项()
A.构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
B.析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程 序员手动添加,否则可能造成内存泄漏。
C.构造函数和析构函数都可以发生重载
D.构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:A
知识点:见上
(5) this指针
①判断题:对于程序员来说,在编写非静态成员函数时不能显式声明名为this的形参,也不能修改this指针,只能通过this去访问相应对象的数据成员
答案:正确
知识点:书本p223注意
②:判断题:this指针可以在成员函数和静态函数中使用
答案:错误
知识点:同上,编写非静态成员函数
(6)静态成员
①判断题:静态数据成员和静态成员函数需要在类内声明、定义及初始化
答案:错误
知识点:书本p226注意:在类内知识声明静态数据成员,而需要在类外定义及初始化静态数据成员
(7)友元机制
①综合编程题:请设计一个建筑类(Building):要求在公共属性中定义一个客厅(m_SittingRoom),私有属性中定义一个卧室(m_BedRoom),
四、继承、派生与多态
五、运算符重载
六、虚函数
①填空:用new和delete动态分配和释放:100-109
#includeusing namespace std; void test() { //在此填空 答案:int* arr = new int[10]; for (int i = 0; i < 10; i++) { arr[i] = i + 100; } for (int i = 0; i < 10; i++) { cout << arr[i] << endl; } //在此填空 答案:delete[]arr; } int main() { test(); }
1.基本语法与注意事项
①判断题:函数引用不需要进行初始化
答案:错误
知识点:引用的基本概念,函数引用时必须要初始化
②填空题:引用的本质是______?
答案:指针常量
知识点:引用的本质
2.引用做函数参数
①填空题:要求实现a与b值交换(a=20,b=10)
void mySwap(//在此输入 , //在此输入) 答案:int &a,int &b
{
//在此输入 答案:int temp = a;
//在此输入 答案:a = b;
//在此输入 答案:b = temp;
}
int main()
{
int a = 10;
int b = 20;
mySwap(a,b);
cout << "a=" << a << endl;
cout << "b=" << b << endl;
}
知识点:函数引用的引用传递,形参会修饰实参,即值会发生改变
②填空题: 写出下列代码输出的值
#include
using namespace std;
void func(int *pnum)
{
(*pnum)++;
}
int main()
{
int value = 5;
func(&value);
cout << value;
system("pause");
return 0;
}
答案:6
知识点:书本例题p195,7-2。函数引用的地址传递,形参会修饰实参,即值会发生改变
③填空题:写出下列代码输出的值
#include
using namespace std;
void func(int num)
{
num++;
}
int main()
{
int value = 5;
func(value);
cout << value;
system("pause");
return 0;
}
答案:5
知识点:书本例题p194,7-1。函数引用的值传递,形参不会修饰实参,即值不会发生改变。
3.引用做函数返回值
①选择题:阅读以下代码,选择正确的选项
int &test()
{
int a = 10;
return a;
}
int main()
{
int& ref = test();
cout << ref << endl; //记为①
cout << ref << endl; //记为②
system("pause");
}
A.①输出的值为10 B.②输出的值为10 C.①②输出的为随机值 D.①②输出的值都为10
答案:A。
知识点:局部变量的引用不能返回,①输出为10因为编译器做了保留。②输出时编译器已经释放,输出的为随机值
(3)函数重载
1.基本概念
①判断题:函数重载主要以形参名字或者函数返回类型不同来区分不同函数
答案:错误
知识点:书本p197,注意不能以形参名字或者函数返回类型不同来区分不同函数
②判断题:函数重载的函数参数类型(或者个数、顺序)可以相同
答案:错误
知识点:函数重载必须函数参数类型不同(或者个数不同、顺序不同)
③判断题:下列代码会报错
void func(int a,int b) {}
int func(int a,int b){}
答案:正确
知识点:函数的返回值不可以作为函数重载的条件
④填空题:请填写下列代码中主函数调用的函数
int add(int x, int y){}
float add(float x,float y){}
int add(int x,int y,int z){}
int add(int a,double b){}
int add(double a,int b){}
int main()
{
int a, b, c;
float f1, f2;
add(a, b); //在此输入 答案:调用int add(int x, int y){}
add(a, b, c); //再次输入 答案:调用int add(int x,int y,int z){}
add(f1, f2); //在此输入 答案:调用float add(float x,float y){}
add(a,f1) //在此输入 答案:调用int add(int a,double b){}
add(f1,a) //在此输入 答案:调用int add(double a,int b){}
system("pause");
return 0;
}
答案:见代码
知识点:书本代码改编,p197,函数重载必须函数参数类型不同(或者个数不同、顺序不同)
(4)函数的默认参数
①选择题:请选出下列代码中会报错的一项
A.
int func2(int a, int b, int c)
{
return a + b + c;
}
B.
int func2(int a=0, int b, int c)
{
return a + b + c;
}
C.
int func2(int a, int b, int c=0)
{
return a + b + c;
}
D.
int func2(int a=0, int b=0, int c=0)
{
return a + b + c;
}
答案:B
知识点:如果形参列表某个位置已经有了默认参数,那么从这个位置往后从左往右都必须有默认值
②判断题:以下这段代码输出会报错
int func(int a = 10, int b = 10);
int func(int a = 10, int b = 10)
{
return a + b;
}
int main()
{
cout << func(10, 10) << endl;
system("pause");
return 0;
}
答案:正确
知识点:函数声明和实现只能有一个有默认参数
③填空题:请写出下列代码的运行结果
#include
using namespace std;
int func(int a = 5, int b = 6)
{
return a + b;
}
int main()
{
int ref;
ref = func(10, 20);
cout << ref << endl;
ref = func(10,30);
cout << ref << endl;
ref = func();
cout << ref << endl;
system("pause");
return 0;
}
答案:30,40,11
知识点:在定义函数时预先声明默认的形参值。调用时如果给出实参则用实参初始化形参,否则采用预先声明的默认形参
④选择题:请阅读以下代码,选出cout输出的值()
int add(int x, int y)
{
return x + y;
}
int add(int x, int y, int z=2)
{
return x + y + z;
}
int main()
{
int ret;
ret = add(10, 20);
cout << ret << endl;
system("pause");
return 0;
}
A.30 B.32 C.会报错 D.以上都不是
答案:C
知识点:书本示例代码p199上方。编译该程序会报错,因为ret=add(10,20)函数无法确认匹配哪个函数。即带默认形参值得函数与不带默认形参值得重载函数可能会出现编译错误
三、类与对象
(1)类的声明与实现
①简答题:请设计一个类计算圆的面积(圆周率为3.14,半径为10)
//在此声明类
//在此输入访问权限
//在此输入属性
//在此输入行为
int main()
{
//在此创建对象
//在此进行输出
}
答案:如下
#include
using namespace std;
//设计一个圆类
//圆求周长的公式:2*pi*半径
const double pi = 3.1415926; //圆周率
class Circle //圆类
{
//访问权限(公共权限)
public:
//属性(半径)
int r;
//行为(获取圆的周长)
double calculate()
{
return 2 * pi * r;
}
};
int main()
{
//通过圆类创建具体的圆(对象)
Circle c1; //c1为clrcle类中实例化的一个对象
c1.r = 10; //给圆对象的属性进行赋值
cout << "圆的周长为" << c1.calculate() << endl; //通过对象c1调用函数
}
知识点:类的声明与实现和访问权限的基础知识
(2)访问权限(class与struct的区别)
①选择题:请阅读以下代码,选出会报错的一项
class One
{
int m_A;
public:
int m_B;
};
struct Two
{
int m_C;
};
int main()
{
One c1;
Two c2;
c1.m_A = 100;
c1.m_B = 100;
c2.m_C = 100;
system("pause");
}
A.c1.m_A = 100; B.c1.m_B = 100; C.c2.m_C = 100; D.都不会
答案:A
知识点:public属于公共权限,类内类外都可以访问;struct与class的区别在于默认访问权限不同,struct默认公共权限,class默认私有权限
(3)数据封装
①综合编程题:请运用数据封装的原理,设计一个立方体类,分别计算立方体体积,并判断两个立方体的体积是否相等(要求类中至少包含:设置长宽高函数、获取长宽高函数、计算体积函数、判断体积是否相等函数)
答案:如下(参考,不唯一)
#include
using namespace std;
class Cube
{
public:
//行为
// 设置并获取立方体长宽高
int setL(int L)
{
m_L = L;
return m_L;
}
int setW(int W)
{
m_W = W;
return m_W;
}
int setH(int H)
{
m_H = H;
return m_H;
}
//计算立方体的体积
int calculateV()
{
return m_L * m_W * m_H;
}
//判断两个立方体体积是否相等
void compareV(int V1, int V2)
{
if (V1 == V2)
{
cout << "两个立方体体积相等" << endl;
}
else
{
cout << "两个立方体体积不相等" << endl;
}
}
private:
//属性
//长宽高
int m_L;
int m_H;
int m_W;
};
int main()
{
Cube c1,c2; //实例化两个具体立方体对象c1,c2
c1.setL(10); //c1长为10
c1.setW(10); //c1宽为10
c1.setH(10); //c1高为10
c2.setL(20); //c2长为20
c2.setW(20); //c2宽为20
c2.setH(20); //c2高为20
cout << "c1体积为:" << c1.calculateV() << endl;
cout << "c2体积为:" << c2.calculateV() << endl;
c1.compareV(c1.calculateV(), c2.calculateV());
}
知识点:类与对象的声明与实现、数据封装的原理。
(4)构造函数和析构函数
①判断题:构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
答案:正确
知识点:书本知识点p125,例8-3下面。
②判断题:析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程序员手动添加,否则可能造成内存泄漏。
答案:错误
知识点:书本知识点p125,8.5上方。构造和析构都是必须有的实现,但是如果我们不提供,编辑器会自动生成(表现为空实现)
③判断题:构造函数和析构函数都可以发生重载
答案:错误
知识点:构造函数有参数,可以发生重载;析构函数没有参数,不可以发生重载
④判断题:构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:错误
知识点:书本知识点p227,在类外调用函数时构造函数必须是public属性
⑤选择题:选出下面四个选择项中正确的一项()
A.构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
B.析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程 序员手动添加,否则可能造成内存泄漏。
C.构造函数和析构函数都可以发生重载
D.构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:A
知识点:见上
(5) this指针
①判断题:对于程序员来说,在编写非静态成员函数时不能显式声明名为this的形参,也不能修改this指针,只能通过this去访问相应对象的数据成员
答案:正确
知识点:书本p223注意
②:判断题:this指针可以在成员函数和静态函数中使用
答案:错误
知识点:同上,编写非静态成员函数
(6)静态成员
①判断题:静态数据成员和静态成员函数需要在类内声明、定义及初始化
答案:错误
知识点:书本p226注意:在类内知识声明静态数据成员,而需要在类外定义及初始化静态数据成员
(7)友元机制
①综合编程题:请设计一个建筑类(Building):要求在公共属性中定义一个客厅(m_SittingRoom),私有属性中定义一个卧室(m_BedRoom),
四、继承、派生与多态
五、运算符重载
六、虚函数
①判断题:函数引用不需要进行初始化
答案:错误
知识点:引用的基本概念,函数引用时必须要初始化
②填空题:引用的本质是______?
答案:指针常量
知识点:引用的本质
①填空题:要求实现a与b值交换(a=20,b=10)
void mySwap(//在此输入 , //在此输入) 答案:int &a,int &b { //在此输入 答案:int temp = a; //在此输入 答案:a = b; //在此输入 答案:b = temp; } int main() { int a = 10; int b = 20; mySwap(a,b); cout << "a=" << a << endl; cout << "b=" << b << endl; }知识点:函数引用的引用传递,形参会修饰实参,即值会发生改变
②填空题: 写出下列代码输出的值
#includeusing namespace std; void func(int *pnum) { (*pnum)++; } int main() { int value = 5; func(&value); cout << value; system("pause"); return 0; } 答案:6
知识点:书本例题p195,7-2。函数引用的地址传递,形参会修饰实参,即值会发生改变
③填空题:写出下列代码输出的值
#includeusing namespace std; void func(int num) { num++; } int main() { int value = 5; func(value); cout << value; system("pause"); return 0; } 答案:5
知识点:书本例题p194,7-1。函数引用的值传递,形参不会修饰实参,即值不会发生改变。
3.引用做函数返回值
①选择题:阅读以下代码,选择正确的选项
int &test()
{
int a = 10;
return a;
}
int main()
{
int& ref = test();
cout << ref << endl; //记为①
cout << ref << endl; //记为②
system("pause");
}
A.①输出的值为10 B.②输出的值为10 C.①②输出的为随机值 D.①②输出的值都为10
答案:A。
知识点:局部变量的引用不能返回,①输出为10因为编译器做了保留。②输出时编译器已经释放,输出的为随机值
(3)函数重载
1.基本概念
①判断题:函数重载主要以形参名字或者函数返回类型不同来区分不同函数
答案:错误
知识点:书本p197,注意不能以形参名字或者函数返回类型不同来区分不同函数
②判断题:函数重载的函数参数类型(或者个数、顺序)可以相同
答案:错误
知识点:函数重载必须函数参数类型不同(或者个数不同、顺序不同)
③判断题:下列代码会报错
void func(int a,int b) {}
int func(int a,int b){}
答案:正确
知识点:函数的返回值不可以作为函数重载的条件
④填空题:请填写下列代码中主函数调用的函数
int add(int x, int y){}
float add(float x,float y){}
int add(int x,int y,int z){}
int add(int a,double b){}
int add(double a,int b){}
int main()
{
int a, b, c;
float f1, f2;
add(a, b); //在此输入 答案:调用int add(int x, int y){}
add(a, b, c); //再次输入 答案:调用int add(int x,int y,int z){}
add(f1, f2); //在此输入 答案:调用float add(float x,float y){}
add(a,f1) //在此输入 答案:调用int add(int a,double b){}
add(f1,a) //在此输入 答案:调用int add(double a,int b){}
system("pause");
return 0;
}
答案:见代码
知识点:书本代码改编,p197,函数重载必须函数参数类型不同(或者个数不同、顺序不同)
(4)函数的默认参数
①选择题:请选出下列代码中会报错的一项
A.
int func2(int a, int b, int c)
{
return a + b + c;
}
B.
int func2(int a=0, int b, int c)
{
return a + b + c;
}
C.
int func2(int a, int b, int c=0)
{
return a + b + c;
}
D.
int func2(int a=0, int b=0, int c=0)
{
return a + b + c;
}
答案:B
知识点:如果形参列表某个位置已经有了默认参数,那么从这个位置往后从左往右都必须有默认值
②判断题:以下这段代码输出会报错
int func(int a = 10, int b = 10);
int func(int a = 10, int b = 10)
{
return a + b;
}
int main()
{
cout << func(10, 10) << endl;
system("pause");
return 0;
}
答案:正确
知识点:函数声明和实现只能有一个有默认参数
③填空题:请写出下列代码的运行结果
#include
using namespace std;
int func(int a = 5, int b = 6)
{
return a + b;
}
int main()
{
int ref;
ref = func(10, 20);
cout << ref << endl;
ref = func(10,30);
cout << ref << endl;
ref = func();
cout << ref << endl;
system("pause");
return 0;
}
答案:30,40,11
知识点:在定义函数时预先声明默认的形参值。调用时如果给出实参则用实参初始化形参,否则采用预先声明的默认形参
④选择题:请阅读以下代码,选出cout输出的值()
int add(int x, int y)
{
return x + y;
}
int add(int x, int y, int z=2)
{
return x + y + z;
}
int main()
{
int ret;
ret = add(10, 20);
cout << ret << endl;
system("pause");
return 0;
}
A.30 B.32 C.会报错 D.以上都不是
答案:C
知识点:书本示例代码p199上方。编译该程序会报错,因为ret=add(10,20)函数无法确认匹配哪个函数。即带默认形参值得函数与不带默认形参值得重载函数可能会出现编译错误
三、类与对象
(1)类的声明与实现
①简答题:请设计一个类计算圆的面积(圆周率为3.14,半径为10)
//在此声明类
//在此输入访问权限
//在此输入属性
//在此输入行为
int main()
{
//在此创建对象
//在此进行输出
}
答案:如下
#include
using namespace std;
//设计一个圆类
//圆求周长的公式:2*pi*半径
const double pi = 3.1415926; //圆周率
class Circle //圆类
{
//访问权限(公共权限)
public:
//属性(半径)
int r;
//行为(获取圆的周长)
double calculate()
{
return 2 * pi * r;
}
};
int main()
{
//通过圆类创建具体的圆(对象)
Circle c1; //c1为clrcle类中实例化的一个对象
c1.r = 10; //给圆对象的属性进行赋值
cout << "圆的周长为" << c1.calculate() << endl; //通过对象c1调用函数
}
知识点:类的声明与实现和访问权限的基础知识
(2)访问权限(class与struct的区别)
①选择题:请阅读以下代码,选出会报错的一项
class One
{
int m_A;
public:
int m_B;
};
struct Two
{
int m_C;
};
int main()
{
One c1;
Two c2;
c1.m_A = 100;
c1.m_B = 100;
c2.m_C = 100;
system("pause");
}
A.c1.m_A = 100; B.c1.m_B = 100; C.c2.m_C = 100; D.都不会
答案:A
知识点:public属于公共权限,类内类外都可以访问;struct与class的区别在于默认访问权限不同,struct默认公共权限,class默认私有权限
(3)数据封装
①综合编程题:请运用数据封装的原理,设计一个立方体类,分别计算立方体体积,并判断两个立方体的体积是否相等(要求类中至少包含:设置长宽高函数、获取长宽高函数、计算体积函数、判断体积是否相等函数)
答案:如下(参考,不唯一)
#include
using namespace std;
class Cube
{
public:
//行为
// 设置并获取立方体长宽高
int setL(int L)
{
m_L = L;
return m_L;
}
int setW(int W)
{
m_W = W;
return m_W;
}
int setH(int H)
{
m_H = H;
return m_H;
}
//计算立方体的体积
int calculateV()
{
return m_L * m_W * m_H;
}
//判断两个立方体体积是否相等
void compareV(int V1, int V2)
{
if (V1 == V2)
{
cout << "两个立方体体积相等" << endl;
}
else
{
cout << "两个立方体体积不相等" << endl;
}
}
private:
//属性
//长宽高
int m_L;
int m_H;
int m_W;
};
int main()
{
Cube c1,c2; //实例化两个具体立方体对象c1,c2
c1.setL(10); //c1长为10
c1.setW(10); //c1宽为10
c1.setH(10); //c1高为10
c2.setL(20); //c2长为20
c2.setW(20); //c2宽为20
c2.setH(20); //c2高为20
cout << "c1体积为:" << c1.calculateV() << endl;
cout << "c2体积为:" << c2.calculateV() << endl;
c1.compareV(c1.calculateV(), c2.calculateV());
}
知识点:类与对象的声明与实现、数据封装的原理。
(4)构造函数和析构函数
①判断题:构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
答案:正确
知识点:书本知识点p125,例8-3下面。
②判断题:析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程序员手动添加,否则可能造成内存泄漏。
答案:错误
知识点:书本知识点p125,8.5上方。构造和析构都是必须有的实现,但是如果我们不提供,编辑器会自动生成(表现为空实现)
③判断题:构造函数和析构函数都可以发生重载
答案:错误
知识点:构造函数有参数,可以发生重载;析构函数没有参数,不可以发生重载
④判断题:构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:错误
知识点:书本知识点p227,在类外调用函数时构造函数必须是public属性
⑤选择题:选出下面四个选择项中正确的一项()
A.构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
B.析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程 序员手动添加,否则可能造成内存泄漏。
C.构造函数和析构函数都可以发生重载
D.构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:A
知识点:见上
(5) this指针
①判断题:对于程序员来说,在编写非静态成员函数时不能显式声明名为this的形参,也不能修改this指针,只能通过this去访问相应对象的数据成员
答案:正确
知识点:书本p223注意
②:判断题:this指针可以在成员函数和静态函数中使用
答案:错误
知识点:同上,编写非静态成员函数
(6)静态成员
①判断题:静态数据成员和静态成员函数需要在类内声明、定义及初始化
答案:错误
知识点:书本p226注意:在类内知识声明静态数据成员,而需要在类外定义及初始化静态数据成员
(7)友元机制
①综合编程题:请设计一个建筑类(Building):要求在公共属性中定义一个客厅(m_SittingRoom),私有属性中定义一个卧室(m_BedRoom),
四、继承、派生与多态
五、运算符重载
六、虚函数
int &test()
{
int a = 10;
return a;
}
int main()
{
int& ref = test();
cout << ref << endl; //记为①
cout << ref << endl; //记为②
system("pause");
}
A.①输出的值为10 B.②输出的值为10 C.①②输出的为随机值 D.①②输出的值都为10
答案:A。
知识点:局部变量的引用不能返回,①输出为10因为编译器做了保留。②输出时编译器已经释放,输出的为随机值
1.基本概念
①判断题:函数重载主要以形参名字或者函数返回类型不同来区分不同函数
答案:错误
知识点:书本p197,注意不能以形参名字或者函数返回类型不同来区分不同函数
②判断题:函数重载的函数参数类型(或者个数、顺序)可以相同
答案:错误
知识点:函数重载必须函数参数类型不同(或者个数不同、顺序不同)
③判断题:下列代码会报错
void func(int a,int b) {}
int func(int a,int b){}
答案:正确
知识点:函数的返回值不可以作为函数重载的条件
④填空题:请填写下列代码中主函数调用的函数
int add(int x, int y){}
float add(float x,float y){}
int add(int x,int y,int z){}
int add(int a,double b){}
int add(double a,int b){}
int main()
{
int a, b, c;
float f1, f2;
add(a, b); //在此输入 答案:调用int add(int x, int y){}
add(a, b, c); //再次输入 答案:调用int add(int x,int y,int z){}
add(f1, f2); //在此输入 答案:调用float add(float x,float y){}
add(a,f1) //在此输入 答案:调用int add(int a,double b){}
add(f1,a) //在此输入 答案:调用int add(double a,int b){}
system("pause");
return 0;
}
答案:见代码
知识点:书本代码改编,p197,函数重载必须函数参数类型不同(或者个数不同、顺序不同)
(4)函数的默认参数
①选择题:请选出下列代码中会报错的一项
A.
int func2(int a, int b, int c)
{
return a + b + c;
}
B.
int func2(int a=0, int b, int c)
{
return a + b + c;
}
C.
int func2(int a, int b, int c=0)
{
return a + b + c;
}
D.
int func2(int a=0, int b=0, int c=0)
{
return a + b + c;
}
答案:B
知识点:如果形参列表某个位置已经有了默认参数,那么从这个位置往后从左往右都必须有默认值
②判断题:以下这段代码输出会报错
int func(int a = 10, int b = 10);
int func(int a = 10, int b = 10)
{
return a + b;
}
int main()
{
cout << func(10, 10) << endl;
system("pause");
return 0;
}
答案:正确
知识点:函数声明和实现只能有一个有默认参数
③填空题:请写出下列代码的运行结果
#include
using namespace std;
int func(int a = 5, int b = 6)
{
return a + b;
}
int main()
{
int ref;
ref = func(10, 20);
cout << ref << endl;
ref = func(10,30);
cout << ref << endl;
ref = func();
cout << ref << endl;
system("pause");
return 0;
}
答案:30,40,11
知识点:在定义函数时预先声明默认的形参值。调用时如果给出实参则用实参初始化形参,否则采用预先声明的默认形参
④选择题:请阅读以下代码,选出cout输出的值()
int add(int x, int y)
{
return x + y;
}
int add(int x, int y, int z=2)
{
return x + y + z;
}
int main()
{
int ret;
ret = add(10, 20);
cout << ret << endl;
system("pause");
return 0;
}
A.30 B.32 C.会报错 D.以上都不是
答案:C
知识点:书本示例代码p199上方。编译该程序会报错,因为ret=add(10,20)函数无法确认匹配哪个函数。即带默认形参值得函数与不带默认形参值得重载函数可能会出现编译错误
三、类与对象
(1)类的声明与实现
①简答题:请设计一个类计算圆的面积(圆周率为3.14,半径为10)
//在此声明类
//在此输入访问权限
//在此输入属性
//在此输入行为
int main()
{
//在此创建对象
//在此进行输出
}
答案:如下
#include
using namespace std;
//设计一个圆类
//圆求周长的公式:2*pi*半径
const double pi = 3.1415926; //圆周率
class Circle //圆类
{
//访问权限(公共权限)
public:
//属性(半径)
int r;
//行为(获取圆的周长)
double calculate()
{
return 2 * pi * r;
}
};
int main()
{
//通过圆类创建具体的圆(对象)
Circle c1; //c1为clrcle类中实例化的一个对象
c1.r = 10; //给圆对象的属性进行赋值
cout << "圆的周长为" << c1.calculate() << endl; //通过对象c1调用函数
}
知识点:类的声明与实现和访问权限的基础知识
(2)访问权限(class与struct的区别)
①选择题:请阅读以下代码,选出会报错的一项
class One
{
int m_A;
public:
int m_B;
};
struct Two
{
int m_C;
};
int main()
{
One c1;
Two c2;
c1.m_A = 100;
c1.m_B = 100;
c2.m_C = 100;
system("pause");
}
A.c1.m_A = 100; B.c1.m_B = 100; C.c2.m_C = 100; D.都不会
答案:A
知识点:public属于公共权限,类内类外都可以访问;struct与class的区别在于默认访问权限不同,struct默认公共权限,class默认私有权限
(3)数据封装
①综合编程题:请运用数据封装的原理,设计一个立方体类,分别计算立方体体积,并判断两个立方体的体积是否相等(要求类中至少包含:设置长宽高函数、获取长宽高函数、计算体积函数、判断体积是否相等函数)
答案:如下(参考,不唯一)
#include
using namespace std;
class Cube
{
public:
//行为
// 设置并获取立方体长宽高
int setL(int L)
{
m_L = L;
return m_L;
}
int setW(int W)
{
m_W = W;
return m_W;
}
int setH(int H)
{
m_H = H;
return m_H;
}
//计算立方体的体积
int calculateV()
{
return m_L * m_W * m_H;
}
//判断两个立方体体积是否相等
void compareV(int V1, int V2)
{
if (V1 == V2)
{
cout << "两个立方体体积相等" << endl;
}
else
{
cout << "两个立方体体积不相等" << endl;
}
}
private:
//属性
//长宽高
int m_L;
int m_H;
int m_W;
};
int main()
{
Cube c1,c2; //实例化两个具体立方体对象c1,c2
c1.setL(10); //c1长为10
c1.setW(10); //c1宽为10
c1.setH(10); //c1高为10
c2.setL(20); //c2长为20
c2.setW(20); //c2宽为20
c2.setH(20); //c2高为20
cout << "c1体积为:" << c1.calculateV() << endl;
cout << "c2体积为:" << c2.calculateV() << endl;
c1.compareV(c1.calculateV(), c2.calculateV());
}
知识点:类与对象的声明与实现、数据封装的原理。
(4)构造函数和析构函数
①判断题:构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
答案:正确
知识点:书本知识点p125,例8-3下面。
②判断题:析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程序员手动添加,否则可能造成内存泄漏。
答案:错误
知识点:书本知识点p125,8.5上方。构造和析构都是必须有的实现,但是如果我们不提供,编辑器会自动生成(表现为空实现)
③判断题:构造函数和析构函数都可以发生重载
答案:错误
知识点:构造函数有参数,可以发生重载;析构函数没有参数,不可以发生重载
④判断题:构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:错误
知识点:书本知识点p227,在类外调用函数时构造函数必须是public属性
⑤选择题:选出下面四个选择项中正确的一项()
A.构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
B.析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程 序员手动添加,否则可能造成内存泄漏。
C.构造函数和析构函数都可以发生重载
D.构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:A
知识点:见上
(5) this指针
①判断题:对于程序员来说,在编写非静态成员函数时不能显式声明名为this的形参,也不能修改this指针,只能通过this去访问相应对象的数据成员
答案:正确
知识点:书本p223注意
②:判断题:this指针可以在成员函数和静态函数中使用
答案:错误
知识点:同上,编写非静态成员函数
(6)静态成员
①判断题:静态数据成员和静态成员函数需要在类内声明、定义及初始化
答案:错误
知识点:书本p226注意:在类内知识声明静态数据成员,而需要在类外定义及初始化静态数据成员
(7)友元机制
①综合编程题:请设计一个建筑类(Building):要求在公共属性中定义一个客厅(m_SittingRoom),私有属性中定义一个卧室(m_BedRoom),
四、继承、派生与多态
五、运算符重载
六、虚函数
①判断题:函数重载主要以形参名字或者函数返回类型不同来区分不同函数
答案:错误
知识点:书本p197,注意不能以形参名字或者函数返回类型不同来区分不同函数
②判断题:函数重载的函数参数类型(或者个数、顺序)可以相同
答案:错误
知识点:函数重载必须函数参数类型不同(或者个数不同、顺序不同)
③判断题:下列代码会报错
void func(int a,int b) {}
int func(int a,int b){}
答案:正确
知识点:函数的返回值不可以作为函数重载的条件
④填空题:请填写下列代码中主函数调用的函数
int add(int x, int y){}
float add(float x,float y){}
int add(int x,int y,int z){}
int add(int a,double b){}
int add(double a,int b){}
int main()
{
int a, b, c;
float f1, f2;
add(a, b); //在此输入 答案:调用int add(int x, int y){}
add(a, b, c); //再次输入 答案:调用int add(int x,int y,int z){}
add(f1, f2); //在此输入 答案:调用float add(float x,float y){}
add(a,f1) //在此输入 答案:调用int add(int a,double b){}
add(f1,a) //在此输入 答案:调用int add(double a,int b){}
system("pause");
return 0;
}
答案:见代码
知识点:书本代码改编,p197,函数重载必须函数参数类型不同(或者个数不同、顺序不同)
①选择题:请选出下列代码中会报错的一项
A.
int func2(int a, int b, int c) { return a + b + c; }B.
int func2(int a=0, int b, int c) { return a + b + c; }C.
int func2(int a, int b, int c=0) { return a + b + c; }D.
int func2(int a=0, int b=0, int c=0) { return a + b + c; }答案:B
知识点:如果形参列表某个位置已经有了默认参数,那么从这个位置往后从左往右都必须有默认值
②判断题:以下这段代码输出会报错
int func(int a = 10, int b = 10); int func(int a = 10, int b = 10) { return a + b; } int main() { cout << func(10, 10) << endl; system("pause"); return 0; }答案:正确
知识点:函数声明和实现只能有一个有默认参数
③填空题:请写出下列代码的运行结果
#includeusing namespace std; int func(int a = 5, int b = 6) { return a + b; } int main() { int ref; ref = func(10, 20); cout << ref << endl; ref = func(10,30); cout << ref << endl; ref = func(); cout << ref << endl; system("pause"); return 0; } 答案:30,40,11
知识点:在定义函数时预先声明默认的形参值。调用时如果给出实参则用实参初始化形参,否则采用预先声明的默认形参
④选择题:请阅读以下代码,选出cout输出的值()
int add(int x, int y) { return x + y; } int add(int x, int y, int z=2) { return x + y + z; } int main() { int ret; ret = add(10, 20); cout << ret << endl; system("pause"); return 0; }A.30 B.32 C.会报错 D.以上都不是
答案:C
知识点:书本示例代码p199上方。编译该程序会报错,因为ret=add(10,20)函数无法确认匹配哪个函数。即带默认形参值得函数与不带默认形参值得重载函数可能会出现编译错误
三、类与对象
(1)类的声明与实现
①简答题:请设计一个类计算圆的面积(圆周率为3.14,半径为10)
//在此声明类
//在此输入访问权限
//在此输入属性
//在此输入行为
int main()
{
//在此创建对象
//在此进行输出
}
答案:如下
#include
using namespace std;
//设计一个圆类
//圆求周长的公式:2*pi*半径
const double pi = 3.1415926; //圆周率
class Circle //圆类
{
//访问权限(公共权限)
public:
//属性(半径)
int r;
//行为(获取圆的周长)
double calculate()
{
return 2 * pi * r;
}
};
int main()
{
//通过圆类创建具体的圆(对象)
Circle c1; //c1为clrcle类中实例化的一个对象
c1.r = 10; //给圆对象的属性进行赋值
cout << "圆的周长为" << c1.calculate() << endl; //通过对象c1调用函数
}
知识点:类的声明与实现和访问权限的基础知识
(2)访问权限(class与struct的区别)
①选择题:请阅读以下代码,选出会报错的一项
class One
{
int m_A;
public:
int m_B;
};
struct Two
{
int m_C;
};
int main()
{
One c1;
Two c2;
c1.m_A = 100;
c1.m_B = 100;
c2.m_C = 100;
system("pause");
}
A.c1.m_A = 100; B.c1.m_B = 100; C.c2.m_C = 100; D.都不会
答案:A
知识点:public属于公共权限,类内类外都可以访问;struct与class的区别在于默认访问权限不同,struct默认公共权限,class默认私有权限
(3)数据封装
①综合编程题:请运用数据封装的原理,设计一个立方体类,分别计算立方体体积,并判断两个立方体的体积是否相等(要求类中至少包含:设置长宽高函数、获取长宽高函数、计算体积函数、判断体积是否相等函数)
答案:如下(参考,不唯一)
#include
using namespace std;
class Cube
{
public:
//行为
// 设置并获取立方体长宽高
int setL(int L)
{
m_L = L;
return m_L;
}
int setW(int W)
{
m_W = W;
return m_W;
}
int setH(int H)
{
m_H = H;
return m_H;
}
//计算立方体的体积
int calculateV()
{
return m_L * m_W * m_H;
}
//判断两个立方体体积是否相等
void compareV(int V1, int V2)
{
if (V1 == V2)
{
cout << "两个立方体体积相等" << endl;
}
else
{
cout << "两个立方体体积不相等" << endl;
}
}
private:
//属性
//长宽高
int m_L;
int m_H;
int m_W;
};
int main()
{
Cube c1,c2; //实例化两个具体立方体对象c1,c2
c1.setL(10); //c1长为10
c1.setW(10); //c1宽为10
c1.setH(10); //c1高为10
c2.setL(20); //c2长为20
c2.setW(20); //c2宽为20
c2.setH(20); //c2高为20
cout << "c1体积为:" << c1.calculateV() << endl;
cout << "c2体积为:" << c2.calculateV() << endl;
c1.compareV(c1.calculateV(), c2.calculateV());
}
知识点:类与对象的声明与实现、数据封装的原理。
(4)构造函数和析构函数
①判断题:构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
答案:正确
知识点:书本知识点p125,例8-3下面。
②判断题:析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程序员手动添加,否则可能造成内存泄漏。
答案:错误
知识点:书本知识点p125,8.5上方。构造和析构都是必须有的实现,但是如果我们不提供,编辑器会自动生成(表现为空实现)
③判断题:构造函数和析构函数都可以发生重载
答案:错误
知识点:构造函数有参数,可以发生重载;析构函数没有参数,不可以发生重载
④判断题:构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:错误
知识点:书本知识点p227,在类外调用函数时构造函数必须是public属性
⑤选择题:选出下面四个选择项中正确的一项()
A.构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
B.析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程 序员手动添加,否则可能造成内存泄漏。
C.构造函数和析构函数都可以发生重载
D.构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:A
知识点:见上
(5) this指针
①判断题:对于程序员来说,在编写非静态成员函数时不能显式声明名为this的形参,也不能修改this指针,只能通过this去访问相应对象的数据成员
答案:正确
知识点:书本p223注意
②:判断题:this指针可以在成员函数和静态函数中使用
答案:错误
知识点:同上,编写非静态成员函数
(6)静态成员
①判断题:静态数据成员和静态成员函数需要在类内声明、定义及初始化
答案:错误
知识点:书本p226注意:在类内知识声明静态数据成员,而需要在类外定义及初始化静态数据成员
(7)友元机制
①综合编程题:请设计一个建筑类(Building):要求在公共属性中定义一个客厅(m_SittingRoom),私有属性中定义一个卧室(m_BedRoom),
四、继承、派生与多态
五、运算符重载
六、虚函数
①简答题:请设计一个类计算圆的面积(圆周率为3.14,半径为10)
//在此声明类 //在此输入访问权限 //在此输入属性 //在此输入行为 int main() { //在此创建对象 //在此进行输出 }答案:如下
#includeusing namespace std; //设计一个圆类 //圆求周长的公式:2*pi*半径 const double pi = 3.1415926; //圆周率 class Circle //圆类 { //访问权限(公共权限) public: //属性(半径) int r; //行为(获取圆的周长) double calculate() { return 2 * pi * r; } }; int main() { //通过圆类创建具体的圆(对象) Circle c1; //c1为clrcle类中实例化的一个对象 c1.r = 10; //给圆对象的属性进行赋值 cout << "圆的周长为" << c1.calculate() << endl; //通过对象c1调用函数 } 知识点:类的声明与实现和访问权限的基础知识
(2)访问权限(class与struct的区别)
①选择题:请阅读以下代码,选出会报错的一项
class One
{
int m_A;
public:
int m_B;
};
struct Two
{
int m_C;
};
int main()
{
One c1;
Two c2;
c1.m_A = 100;
c1.m_B = 100;
c2.m_C = 100;
system("pause");
}
A.c1.m_A = 100; B.c1.m_B = 100; C.c2.m_C = 100; D.都不会
答案:A
知识点:public属于公共权限,类内类外都可以访问;struct与class的区别在于默认访问权限不同,struct默认公共权限,class默认私有权限
(3)数据封装
①综合编程题:请运用数据封装的原理,设计一个立方体类,分别计算立方体体积,并判断两个立方体的体积是否相等(要求类中至少包含:设置长宽高函数、获取长宽高函数、计算体积函数、判断体积是否相等函数)
答案:如下(参考,不唯一)
#include
using namespace std;
class Cube
{
public:
//行为
// 设置并获取立方体长宽高
int setL(int L)
{
m_L = L;
return m_L;
}
int setW(int W)
{
m_W = W;
return m_W;
}
int setH(int H)
{
m_H = H;
return m_H;
}
//计算立方体的体积
int calculateV()
{
return m_L * m_W * m_H;
}
//判断两个立方体体积是否相等
void compareV(int V1, int V2)
{
if (V1 == V2)
{
cout << "两个立方体体积相等" << endl;
}
else
{
cout << "两个立方体体积不相等" << endl;
}
}
private:
//属性
//长宽高
int m_L;
int m_H;
int m_W;
};
int main()
{
Cube c1,c2; //实例化两个具体立方体对象c1,c2
c1.setL(10); //c1长为10
c1.setW(10); //c1宽为10
c1.setH(10); //c1高为10
c2.setL(20); //c2长为20
c2.setW(20); //c2宽为20
c2.setH(20); //c2高为20
cout << "c1体积为:" << c1.calculateV() << endl;
cout << "c2体积为:" << c2.calculateV() << endl;
c1.compareV(c1.calculateV(), c2.calculateV());
}
知识点:类与对象的声明与实现、数据封装的原理。
(4)构造函数和析构函数
①判断题:构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
答案:正确
知识点:书本知识点p125,例8-3下面。
②判断题:析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程序员手动添加,否则可能造成内存泄漏。
答案:错误
知识点:书本知识点p125,8.5上方。构造和析构都是必须有的实现,但是如果我们不提供,编辑器会自动生成(表现为空实现)
③判断题:构造函数和析构函数都可以发生重载
答案:错误
知识点:构造函数有参数,可以发生重载;析构函数没有参数,不可以发生重载
④判断题:构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:错误
知识点:书本知识点p227,在类外调用函数时构造函数必须是public属性
⑤选择题:选出下面四个选择项中正确的一项()
A.构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
B.析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程 序员手动添加,否则可能造成内存泄漏。
C.构造函数和析构函数都可以发生重载
D.构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:A
知识点:见上
(5) this指针
①判断题:对于程序员来说,在编写非静态成员函数时不能显式声明名为this的形参,也不能修改this指针,只能通过this去访问相应对象的数据成员
答案:正确
知识点:书本p223注意
②:判断题:this指针可以在成员函数和静态函数中使用
答案:错误
知识点:同上,编写非静态成员函数
(6)静态成员
①判断题:静态数据成员和静态成员函数需要在类内声明、定义及初始化
答案:错误
知识点:书本p226注意:在类内知识声明静态数据成员,而需要在类外定义及初始化静态数据成员
(7)友元机制
①综合编程题:请设计一个建筑类(Building):要求在公共属性中定义一个客厅(m_SittingRoom),私有属性中定义一个卧室(m_BedRoom),
四、继承、派生与多态
五、运算符重载
六、虚函数
①选择题:请阅读以下代码,选出会报错的一项
class One
{
int m_A;
public:
int m_B;
};
struct Two
{
int m_C;
};
int main()
{
One c1;
Two c2;
c1.m_A = 100;
c1.m_B = 100;
c2.m_C = 100;
system("pause");
}
A.c1.m_A = 100; B.c1.m_B = 100; C.c2.m_C = 100; D.都不会
答案:A
知识点:public属于公共权限,类内类外都可以访问;struct与class的区别在于默认访问权限不同,struct默认公共权限,class默认私有权限
①综合编程题:请运用数据封装的原理,设计一个立方体类,分别计算立方体体积,并判断两个立方体的体积是否相等(要求类中至少包含:设置长宽高函数、获取长宽高函数、计算体积函数、判断体积是否相等函数)
答案:如下(参考,不唯一)
#includeusing namespace std; class Cube { public: //行为 // 设置并获取立方体长宽高 int setL(int L) { m_L = L; return m_L; } int setW(int W) { m_W = W; return m_W; } int setH(int H) { m_H = H; return m_H; } //计算立方体的体积 int calculateV() { return m_L * m_W * m_H; } //判断两个立方体体积是否相等 void compareV(int V1, int V2) { if (V1 == V2) { cout << "两个立方体体积相等" << endl; } else { cout << "两个立方体体积不相等" << endl; } } private: //属性 //长宽高 int m_L; int m_H; int m_W; }; int main() { Cube c1,c2; //实例化两个具体立方体对象c1,c2 c1.setL(10); //c1长为10 c1.setW(10); //c1宽为10 c1.setH(10); //c1高为10 c2.setL(20); //c2长为20 c2.setW(20); //c2宽为20 c2.setH(20); //c2高为20 cout << "c1体积为:" << c1.calculateV() << endl; cout << "c2体积为:" << c2.calculateV() << endl; c1.compareV(c1.calculateV(), c2.calculateV()); } 知识点:类与对象的声明与实现、数据封装的原理。
(4)构造函数和析构函数
①判断题:构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
答案:正确
知识点:书本知识点p125,例8-3下面。
②判断题:析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程序员手动添加,否则可能造成内存泄漏。
答案:错误
知识点:书本知识点p125,8.5上方。构造和析构都是必须有的实现,但是如果我们不提供,编辑器会自动生成(表现为空实现)
③判断题:构造函数和析构函数都可以发生重载
答案:错误
知识点:构造函数有参数,可以发生重载;析构函数没有参数,不可以发生重载
④判断题:构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:错误
知识点:书本知识点p227,在类外调用函数时构造函数必须是public属性
⑤选择题:选出下面四个选择项中正确的一项()
A.构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
B.析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程 序员手动添加,否则可能造成内存泄漏。
C.构造函数和析构函数都可以发生重载
D.构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:A
知识点:见上
(5) this指针
①判断题:对于程序员来说,在编写非静态成员函数时不能显式声明名为this的形参,也不能修改this指针,只能通过this去访问相应对象的数据成员
答案:正确
知识点:书本p223注意
②:判断题:this指针可以在成员函数和静态函数中使用
答案:错误
知识点:同上,编写非静态成员函数
(6)静态成员
①判断题:静态数据成员和静态成员函数需要在类内声明、定义及初始化
答案:错误
知识点:书本p226注意:在类内知识声明静态数据成员,而需要在类外定义及初始化静态数据成员
(7)友元机制
①综合编程题:请设计一个建筑类(Building):要求在公共属性中定义一个客厅(m_SittingRoom),私有属性中定义一个卧室(m_BedRoom),
四、继承、派生与多态
五、运算符重载
六、虚函数
①判断题:构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
答案:正确
知识点:书本知识点p125,例8-3下面。
②判断题:析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程序员手动添加,否则可能造成内存泄漏。
答案:错误
知识点:书本知识点p125,8.5上方。构造和析构都是必须有的实现,但是如果我们不提供,编辑器会自动生成(表现为空实现)
③判断题:构造函数和析构函数都可以发生重载
答案:错误
知识点:构造函数有参数,可以发生重载;析构函数没有参数,不可以发生重载
④判断题:构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:错误
知识点:书本知识点p227,在类外调用函数时构造函数必须是public属性
⑤选择题:选出下面四个选择项中正确的一项()
A.构造函数是类的一种特殊成员,函数名和类完全相同,没有返回值类型,可以有参数
B.析构函数的任务是在程序结束销毁对象时完成一些清理工作,因此在编写程序时必须由程 序员手动添加,否则可能造成内存泄漏。
C.构造函数和析构函数都可以发生重载
D.构造函数可以声明为非public属性,并且在主程序定义对象调用时不会出错
答案:A
知识点:见上
①判断题:对于程序员来说,在编写非静态成员函数时不能显式声明名为this的形参,也不能修改this指针,只能通过this去访问相应对象的数据成员
答案:正确
知识点:书本p223注意
②:判断题:this指针可以在成员函数和静态函数中使用
答案:错误
知识点:同上,编写非静态成员函数
(6)静态成员
①判断题:静态数据成员和静态成员函数需要在类内声明、定义及初始化
答案:错误
知识点:书本p226注意:在类内知识声明静态数据成员,而需要在类外定义及初始化静态数据成员
(7)友元机制
①综合编程题:请设计一个建筑类(Building):要求在公共属性中定义一个客厅(m_SittingRoom),私有属性中定义一个卧室(m_BedRoom),
四、继承、派生与多态
五、运算符重载
六、虚函数
①判断题:静态数据成员和静态成员函数需要在类内声明、定义及初始化
答案:错误
知识点:书本p226注意:在类内知识声明静态数据成员,而需要在类外定义及初始化静态数据成员
①综合编程题:请设计一个建筑类(Building):要求在公共属性中定义一个客厅(m_SittingRoom),私有属性中定义一个卧室(m_BedRoom),



