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

原创 2015年11月20日 09:24:00

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


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


c++程序员面试宝典

静态存储区 static静态变量 全局变量 栈 局部变量 堆 动态分配的 栈堆:循环的迭代用中 数据量大 则溢出 239 static作用:静态变量的生存周期和作用域...
  • cyuyanchenxi
  • cyuyanchenxi
  • 2017年03月20日 23:28
  • 545

C/C++程序员面试宝典-1

第2部分 C/C++基础知识 1. C++中的基本数据类型: 2. C++中的整型: 3. C++中的常见常量 常量按照数据类型的不同分为整型常量,浮点型常量,字符型常量,还有...
  • benpaobagzb
  • benpaobagzb
  • 2015年09月14日 16:43
  • 676

2017 java程序员面试宝典

转自点击打开链接 1:JDK与JRE JDK:JAVA Development Kit, java开发工具包; 包括各种类库和工具,当然也包括JRE JRE:JAVA Runtime Environm...
  • bigheadyushan
  • bigheadyushan
  • 2017年08月30日 00:09
  • 964

程序员面试宝典(第五版)里的错误

为了准备找工作,买了本《程序员面试宝典》看看,结果发现这本书里面错漏的地方实在是太多了。记录一下,希望对后来的人有所帮助。 1.184页,“面试官会节和程序对你的思维能力进行考量。”中“节”字写错,...
  • ww1473345713
  • ww1473345713
  • 2016年03月21日 22:58
  • 3871

《程序员面试宝典3》大量错误(50+)纠正表

《程序员面试宝典》第3版大量错误纠正表        以前随手翻了翻,想写这篇文章没有写,现在完整看了下就记录下来了。找工作的同学大部分都会看《程序员面试宝典》,本来看过去就可以了。但我还是要把...
  • hilyoo
  • hilyoo
  • 2009年08月20日 15:43
  • 22316

《程序员面试宝典》学习记录6

印象笔记同步分享:《程序员面试宝典》学习记录6 《程序员面试宝典》学习记录6 第10章 面向对象 10.1 面向对象的基本概念 考点1:面向对象三大特性 1)...
  • u010555622
  • u010555622
  • 2014年08月28日 22:34
  • 1621

.net概述---from《C#与.net程序员面试宝典》

1、介绍APS.NET ASP.NET不是一种语言,而是
  • wangyajing1991
  • wangyajing1991
  • 2014年08月14日 14:14
  • 450

C/C++经典面试题总结摘选 C/C++程序员面试宝典(一)

=================================================================================== 1. char p[]和cha...
  • shihui512
  • shihui512
  • 2013年06月04日 21:30
  • 2960

【JAVA程序员面试宝典】2天看完了-谈谈我的理解吧

今天开启阅读了这本书,中断了原计划中算法中级层次的系统性训练,我觉得先看看面试题吧。先给这本书A掉再说。 阅读了一天,大概阅读了一半,有点失望,因为这本书讲解的面试都是基础中的基础,我看着都着急,作者...
  • superMarss
  • superMarss
  • 2014年09月07日 23:44
  • 5338

《Java程序员面试宝典(第4版)》 试读感想

《Java程序员面试宝典(第4版)》 试读感想         谈到Java程序员面试这个话题,我想,每个从事java开发的人都有一套自己的见解,特别是工作3年以上的。对于学校里将要毕业即将开始找工...
  • chwshuang
  • chwshuang
  • 2015年11月06日 18:11
  • 2777
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:22.c/c++程序员面试宝典-类
举报原因:
原因补充:

(最多只允许输入30个字)