面试例题(1-10)

面向对象的基本概念

面试例题1:面向对象技术的基本概念是什么?

解析:按照定义,OO(面向对象)编程语言必须提供对象、类和继承。
答案:对象、类和继承。

面试例题2:C++中的空类默认产生哪些类成员函数?

Class Empty
{
Public;
};
解析:类的概念
答案:对于一个空类,编译器默认产生4个成员函数:默认构造函数、析构函数、拷贝构造函数和赋值函数。

面试例题3:Which is incorrect about the class?(关于类,下面哪个叙述是错误的?)

A. A class is a blueprint to objects.(类是对象的设计蓝图)
B. 我们用关键字类来创建一个类的结构。
C. 一旦一个类被声明,这个类名可以用做一个类型名来声明变量。
D. 类和结构一样,两者没有任何区别。
解析:类的概念问题。见例5
答案:D

面试例题4:下面关于面向对象技术的叙述,哪个是错误的?

A. 面向对象的关键特点是使用软件对象来编程。
B. 面向对象程序提供了很多优势:简易化、模块化、易修改性、扩展性等等。
C. 面向对象的特点和面向过程的特点一样,重点在于一步一步的过程。
D. 面向对象的关键特点是数据过程的附加。
解析:OOP的概念问题。面向对象和面向过程不能混为一谈。
答案:C和D

面试例题5:类和结构struct和class的区别?

答案:在C++中两者的唯一区别是:struct里面默认的访问控制是public,class中默认的访问控制是private。

面试例题6:现有以下代码,则编译时会产生错误的是_____。

Struct Test
{
Test(int){}
Test(){}
Void fun(){}
};

Int main()
{
Test a(2);//语句1
a.fun();//语句2
Test b();//语句3
b.fun();//语句4
return 0;
}

A. 语句1 B.语句2 C.语句3 D.语句4
解析:Test b() 这个语法等同于声明了一个函数,函数名为b, 返回值为Test, 传入参数为空。但是实际上,代码作者是希望声明一个类型为Test,变量名为b的变量,应该写成Test b;, 但程序中这个错误在编译时是检测不出来的。出错的是b.fun(),它是编译不过去的。
答案:D。

面试例题7:哪一种成员变量可以在同一个类的实例之间共享?

答案:必须使用静态成员变量在一个类的所有实例间共享数据。如果想限制对静态成员变量的访问,则必须把它们声明为保护型或私有型。

不允许用静态成员变量去存放某一个对象的数据。 静态成员数据是在这个类的所有对象间共享的。 (疑惑↑)

面试例题8:指出下面程序的错误。如果把静态成员数据设为私有,该如何访问?

#include <iostream>
Using namespace std;

class Cat
{
public:
	Cat(int age):itsAge(age) {	HowManyCats++;	}
	virtual	~Cat(){	HowManyCats--;	}
	virtual	int GetAge(){return itsAge;}
	virtual	void SetAge(int age) {itsAge = age;}
	static int HowManyCats;
private:
	int itsAge;
};

int main()
{
	const int MaxCats = 5;
	int i;
	Cat* CatHouse[MaxCats];
	for(i = 0; i < MaxCats; i++)
	{
		CatHouse[i] = new Cat(i);
	}
	for(i = 0; i < MaxCats; i++)
	{
		cout << ”THere are”;
		cout << Cat::HowManyCats;
		cout << ”cats left!\n”;
		cout << ”Deleting the one which is”;
		cout << CatHouse{i}->GetAge();
		cout << ”years old\n”;
		delete CatHouse[i];
		CatHouse[i] = 0;
	}
	return 0;
}

答案:该程序错在设定了静态成员变量,却没有给静态成员变量赋初值。如果把静态成员数据设为私有,可以通过公有静态成员函数访问

#include <iostream>
Using namespace std;

Class Cat
{
public:
	Cat(int age):itsAge(age) {HowManyCats++;}
	Virtual ~Cat(){HowManyCats--;}
	Virtual int GetAge(){return itsAge;}
	Virtual void SetAge(int age) {itsAge = age;}
	//static int HowManyCats;
	Static int GetHowMany(){return HowManeCats;}
private:
	int itsAge;
	static int HowManyCats;
};
int cat::HowNamyCats = 0;
Void tele();
Int main()
{
	Const int MaxCats = 5;
	Int i;
	Cat* CatHouse[MaxCats];
	for(i = 0; i < MaxCats; i++)
	{
		CatHouse[i] = new Cat(i);
	}
		For(i = 0; i < MaxCats; i++)
	{
		cout<<”THere are”;
		cout<<Cat::HowManyCats;
		cout<<”cats left!\n”;
		cout<<”Deleting the one which is”;
		cout<<CatHouse{i}->GetAge();
		cout<<”years old\n”;
		Delete CatHouse[i];
		CatHouse[i] = 0;
	}
	return 0;
}
Void tele()
{
	cout<< “THere are” << Cat::GetHowMany() << “Cats alive!\n”;
}

面试例题9:找出下面程序的错误,并解释它为什么是错的。

#include<iostream>
using namespace std;
class Year
{
	int y;
	const int InitY = 1970;
public:
	Year(){ y = InitY ;}
	int year() const{ return y;};
	void add_year(int i) {y = year() + i ;}
};
void main()
{
	Year y1;
	Year* const py1 = new Year();
	y1.add_year(1);
	py1->add_year(2);
	cout<<y1.year() <<,<< py1->year() << endl;
	return;
}

解析:这道程序题存在着成员变量问题 ,没有问题。
答案: (基本上都是错的,不要看↓)

#include<iostream>
using namespace std;
class Year{
	int y;
	static const int InitY = 1970; //错误1
public:
	Year():{y = InitY;}; //错误2没有分号
	int year() const{ return y;};
	void add_year(int i) {y = year() + i};
};
int main() //错误3 在C++中不允许mai()的返回值为void
{
	Year y1;
	Year* const py1 = new Year();
	y1.add_year(1);
	py1->add_year(2);
	cout<<y1.year() <<,<< py1->year() << endl;
	return;
}

面试例题10: 这个类声明正确吗?为什么?

class A
{
public:
	Const int Size = 0;
}

解析这道程序体存在着成员变量问题。常量必须在构造函数的初始化列表里面初始化或者将其设置成static。 (ps:早期的编译器不能通过,现在的没问题。当然下面的程序也没有问题)
答案
正确的程序如下:

class A
{
public:
	A() { const int Size = 9; }
};

或者:

class A
{
public:
	A() { static const int Size = 9; }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值