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

原创 2015年11月20日 10:39:38

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

在c++中,运行库可以定义类的成员,类的成员包括数据、函数和嵌套类型,它们一起组成了类。



面试题100  成员变量有哪些访问方式****


分析:在类的成员中,类的数据变量就是类的成员变量。


在c、c++中,类的成员变量有3种访问方式,分别是private,public和protected,它们的访问权限如下所示:

private:只能由该类中的方法访问,是私有变量,不能被该类的对象访问;

protected:可以被该类中的方法和其友元函数访问,但不能被该类的对象访问;

public:可以被该类中的方法和其友元函数访问,是公有变量,也可以由该类的对象访问。


在c语言中,如果没有声明访问权限,默认的访问权限是public,而在c++中默认的访问权限是private。所以在类中的成员中如果需要外部调用都需要加上关键字public声明为公有类型,这一特性同样适用于类中的成员函数。


【答案】成员变量根据访问权限有private,protected和public3种访问方式。



面试题101  成员变量有哪些访问控制方式****


分析:在c++中,对成员变量进行访问控制主要有一下几个目的。

第一:对普通函数和其他类的成员函数来说,访问控制可以保护类的成员变量数据不被随便修改。

第二:类可以对它本身的内部数据维护负责,只有类自己才能够访问自己的私有成员变量。

第三:类的外部接口,把一个类分成公有的和受保护的两部分,对于使用者来说它只要会用就可以,无须了解类的内部完整结构,起到黑盒的效果,使用起来更加轻松简单。

第四:类与其他代码的关联性,类的功能是独立的,不需要依靠应用程序的运行环境,这个程序可以用它,另外一个也可以用它,使得你可以轻易实现类的相互替换。


成员变量的访问控制方式和成员变量的访问方式一样,有private,protect和public3种。下面举一个例子来看看类是怎样实现访问控制的。示例代码如下:

#include<iostream>

#include"ballscore.h"

class getscore

{

protected:

const static int goods=5;   //得分

const static int bads=-3;   //扣分

float gradescore;     //平均得分

public:

float GetGS(float good,float bad)  //good为得分次数,bad为失分次数

{

Gradescore=(good * goods + bad * bads)/(good+bad);

return gradescore;  //返回平均得分

}

};

void main()

{

Ballscore eff;

cout<<jeff.GetGS(10,3);

jim.gradescore=5.5;   //注意,想修改jim的平均成绩是不允许的

cin.get();

}


在上面的代码中实现 一个计算平均得分的类,类中有一个公共的计算平均得分的方法和受保护的原分、失分和平均得分属性。在主函数的调用中,gradescore属性是受保护的,所以不可以在外部修改它的值,而GetGS方式是可以在外部被调用的。


【答案】在c、c++中,是通过声明private、protect和public3种访问权限来对成员变量进行访问控制的。



面试题102  如何访问静态成员***


分析:声明为static的类成员能在类的范围内共享,这样的类成员就是类的静态成员。在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,因此保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。


使用静态数据成员可以节省内存,因为它是所有对象所公有的。因此,对多个对象来说,静态数据成员只会在内存中开辟一块存储空间,供所有对象共用,静态成员在类加载的时候就存在于内存中。静态数据成员的值对于每个对象都是一样,但是它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。


类的静态成员是可以独立访问的,也就是说,不需要创建类的实例就可以访问静态成员。类的静态函数只能调用静态成员,因为静态函数不包含this指针。


静态数据成员被类的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。示例代码如下:


class base

{

public:

static int _num;  //声明静态成员

};

int base::_num=0;  //静态数据成员的真正定义

class derived : public base

{

};

main()

{

base a;

derived b;

a._num ++;

cout<<"base class static data number _num is"<<a._num<<endl;

b._num++;

cout<<"derived class static data number _num is"<<b._num<<endl;

}


上面代码运行的结果如下:

1, 2


由此可见,派生类和基类通用了一个静态成员。

类的静态成员可以成为成员函数的可选参数,而普通成员则不可以。示例代码如下:

class base

{

public:

static int _staticVar;

int _var;

void foo1(int i=staticVar);  //正确,_staticVar为静态数据成员

void foo2(int i=_var);   //错误,_var为普通数据成员

}


类的静态成员的类型可以是所属类的类型,而普通成员则不可以。普通成员的只能声明为所属类类型的指针或引用。示例代码如下:

class base 

{

public:

static base _object1;  //正确,静态数据成员

base _object2;  //错误

base *pobject;   //正确,指针

base &mobject;  //正确,引用

}


【答案】静态成员可以独立访问,不需要创建类的实例,它也不能用实例来进行调用。类的静态方法只能访问类的静态成员。



C#与.NET程序员面试宝典

题目虽然有点多,但是都是最常见的面试题。如果大家准备参加相关的面试,最好看看。尤其最后的几十个跨国公司面试题。现在国内很多企业都开始学习这套方式,来为难大家。有准备,就容易成功。 即使大家今年不...
  • u014316433
  • u014316433
  • 2014年05月23日 13:54
  • 1769

C/C++程序员应聘常见面试题深入剖析

C/C++程序员应聘常见面试题深入剖析 2006-02-27 22:20:00 分类: C/C++ C/C++程序员应聘常见面试题深入剖析 1       ...
  • zxl2016
  • zxl2016
  • 2016年07月28日 09:45
  • 1645

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

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

32.c/c++程序员面试宝典-类成员函数

32.c/c++程序员面试宝典-类成员函数
  • gdut2015go
  • gdut2015go
  • 2015年11月26日 16:22
  • 429

28.c/c++程序员面试宝典-继承时的类作用域

c/c++程序员面试宝典-继承时的类作用域
  • gdut2015go
  • gdut2015go
  • 2015年11月24日 10:07
  • 758

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

22.c/c++程序员面试宝典-类
  • gdut2015go
  • gdut2015go
  • 2015年11月20日 09:24
  • 397

19.c/c++程序员面试宝典-this指针

19.c/c++程序员面试宝典-this指针
  • gdut2015go
  • gdut2015go
  • 2015年11月18日 12:47
  • 598

35.c/c++程序员面试宝典-容器

35.c/c++程序员面试宝典-容器
  • gdut2015go
  • gdut2015go
  • 2015年11月28日 12:03
  • 540

《Java程序员面试笔试宝典》之Java与C/C++有什么异同

Java与C++都是面向对象语言,都使用了面向对象思想(例如封装、继承、多态等),由于面向对象有许多非常好的特性(继承、组合等),使得二者都有很好的可重用性。...
  • xdhehao
  • xdhehao
  • 2014年05月18日 21:35
  • 1741

3.c/c++程序员面试宝典-变量

3.c/c++程序员面试宝典-变量
  • gdut2015go
  • gdut2015go
  • 2015年11月09日 21:36
  • 347
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:23.c/c++程序员面试宝典-类成员
举报原因:
原因补充:

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