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

来源:互联网 发布:discuz数据库删除帖子 编辑:程序博客网 时间:2024/04/27 22:34

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()一样,但是在基类中不需要写函数的实现。


【答案】包含纯虚函数的类称为抽象类。抽象类把有共同属性或方法的对象抽象成一个类。


0 0
原创粉丝点击