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()一样,但是在基类中不需要写函数的实现。
【答案】包含纯虚函数的类称为抽象类。抽象类把有共同属性或方法的对象抽象成一个类。
类是面向对象程序设计语言中最重要的概念之一,其本质上是对某种类型的对象定义变量和方法的原型。它表示对显示生活中一类具有共同特征的事物的抽象。类是面向对象编程的基础。
面试题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()一样,但是在基类中不需要写函数的实现。
【答案】包含纯虚函数的类称为抽象类。抽象类把有共同属性或方法的对象抽象成一个类。
相关文章推荐
- Google C++ style
- 5个月iOS开发入门总结(C++转行iOS)
- 第10周项目1 二叉树算法库
- C/C++中产生随机数(rand,srand用法)
- C++实现单链表(2) 一些函数的实现
- C++之容器
- C++之容器(关联容器)
- c++中的关联容器
- C++之UML图示
- AVL树C++实现
- 【C语言】第一章 导言
- 【C语言】编写一个函数reverse_string(char * string)(递归实现
- 【C语言】【面试题】【笔试题】写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
- strstr查找子字符串函数
- 【C语言】【面试题】【笔试题】编写一个函数实现n^k,使用递归实现
- 【C语言】在终端输入多行信息,找出包含“ould”的行,并打印改行
- VC++ 与C 语言的区别
- 【C语言】【面试题】【笔试题】模拟实现strstr函数
- 【C语言】【面试题】【笔试题】二维数组中的查找,杨氏矩阵
- C++基础::文件流