您的位置:首页 > 编程语言 > C语言/C++

22.c/c++程序员面试宝典-类

2015-11-20 09:24 260 查看
22.c/c++程序员面试宝典-类
类是面向对象程序设计语言中最重要的概念之一,其本质上是对某种类型的对象定义变量和方法的原型。它表示对显示生活中一类具有共同特征的事物的抽象。类是面向对象编程的基础。

面试题98 类和结构有什么区别*****

分析:类是对某种类型的对象定义变量和方法的原型。它表示对显示生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。

类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件等。类本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。一个类可以在内存中创建多个相同类型的对象。类定义的一般形式如下:

class Name

{public:

类的公有接口

private:

私有的成员函数

私有的数据成员定义

};

其中public表示公开访问权限。而private表示只有类自身才具有访问权限。类成员有3种不同的访问权限。

公有成员可以在类外访问;

私有成员只能被该类的成员函数访问;

保护成员只能被该类的成员函数或派生类的成员函数访问。

类体定义类的成员,它支持两种类型的成员,具体如下:

一是数据成员,它们指定了该类对象的内部表示;

二是成员函数,它们指定了该类的操作。

结构是用户定义的值类型。与类相似,结构可以保护构造函数、常数、字段、方法、属性、索引器、运算符和嵌套类型。

结构定义的一般形式如下:

struct test

{

float a;

int b;

};

下面来使用结构和类来实现同样的一个输出日期的功能。示例代码如下:

#include<iostream>

using namespace std;

struct Date1 //定义结构体

{

int year;

int month;

int day;

void display();

};

void Date1::display()

{

cout<<"你输入的日期如下:";

cout<<year<<"年"<<month<<"月"<<day<<"日";

}

class Date2 //定义类

{

int year;

int month;

int day;

public:

Date2()

{}

Date2(int year0,int month0,int day0) //带参数的构造函数

{

year=year0;

month=month0;

day=day0;

}

void getDate()

{

cout<<"你输入的日期如下;";

cout<<year<<"年"<<month<<"月"<<day<<"日";

}

};

int main()

{

Date1 date1;

date1.year=2009;

date1.month=7;

date1.day=28;

date1.display();

Date2 date2(2009,7,29);

date2.getDate();

return 0;

}

注意:c语言中只有结构的概念,在c++中,可以在结构体中声明函数,但是在c语言中是不允许的,这也是c语言和c++的本质区别之一。

【答案】实例化的类存储在内存的堆内,而结构存储在栈内,结构的执行效率相对较高。结构没有析构函数。结构不可以继承。一般来说结构用来处理较少的程序基础数据,而类用来处理复杂逻辑。

面试题99 抽象类及它的用途***

分析:有的时候,基类并不需要与具体的事物关联起来,例如动物,它是一个抽象的概念,表示所有的动物,可以派生企鹅,猴子等。c++引入了抽象类的概念来为各种派生类提供一个公共的界面。

抽象类可以提供多个派生类共享基类的公共定义,它可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,也就是说,对抽象类不能使用new关键字,它也不能被封装。如果抽象类的派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。派生类使用覆盖来实现抽象方法。

抽象类一定包含有纯虚函数,因此不能定义抽象类的对象。一个使用抽象类的代码示例如下:

class A //定义抽象类

{

public:

A();

void f1();

virtual void f2(); //虚函数

virtual void f3()=0;

virtual ();

};

class B : public A //继承抽象类

{

public:

B();

void f1();

void f2();

void f3();

virtual ~B();

}

int main()

{

A *m_j=new B();

m_j->f1();

m_j->f2();

m_j->f3();

delete m_j;

return 0;

}

在上面代码中,f1()是一个普通的重载。调用m_j->f1();会调用A类中的f1(),它是由A类定义的,这样就调用这个类的函数。f2()是虚函数。m_j->f2()会调用m_j保存的对象中对应的这个函数。这是由于new B()对象。f3()和f2()一样,但是在基类中不需要写函数的实现。

【答案】包含纯虚函数的类称为抽象类。抽象类把有共同属性或方法的对象抽象成一个类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: