现在的位置: 首页 > 综合 > 正文

面向对象(C++)

2013年05月18日 ⁄ 综合 ⁄ 共 1366字 ⁄ 字号 评论关闭

     说到面向对象,大家第一反应应该就是它的三大特性:封装性、继承性和多态性。那么我们先简单的了解一下这三大特性:

     (1)封装性:封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

在C++中类中成员的属性有:public, protected, private,这三个属性的访问权限依次降低。

     (2)继承性:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

     (3)多态性:多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。实现多态,有二种方式,覆盖,重载。

覆盖,是指子类重新定义父类的虚函数的做法。

重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

下面开始我们今天的学习。

1、C++中空类默认产生哪些类成员函数?

答案:

对于一个空类,编译器默认产生4个成员函数:

(1)默认构造函数

(2)析构函数

(3)拷贝构造函数

(4)赋值函数

 

2、结构是否可以有构造函数、析构函数及成员函数?如果可以,那么结构和类还有什么区别吗?

答案:

区别是class中变量默认是private,struct中的变量默认是public。class继承默认是private继承,而struct继承默认是public继承。struct可以有构造函数、析构函数,之间也可以继承甚至是多重继承,等等。C++中的struct其实和class意义一样,唯一不同就是struct里面默认的访问控制是public,class中默认访问控制是private。C++中存在struct关键字的唯一意义就是为了让C程序员有个归属感,是为了让C++编译器兼容以前用C开发的项目。

 

3、下面程序打印出的结果是什么?

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
 
class base
{
private:
    int m_i;
    int m_j;
public:
    base(
int i
) : m_j(i),m_i(m_j) {}
    base()
: m_j(0),m_i(m_j){}
    int get_i()
{
return m_i;}
    int get_j()
{
return m_j;}
};
 
int main
()
{
    base
obj(98);
    cout
<< obj.get_i() <<endl<< obj.get_j() <<endl;
    return 0;
}

解析:本题想得到的结果是“98,98”。但是成员变量的声明是先 m_i ,然后是 m_j;初始化列表的初始化变量顺序是根据成员变量的声明顺序来执行的,因此,先初始化 m_i,但此时 m_j 还未初始化,m_i 会被赋予一个随机值。改变一下成员变量的声明顺序可以得到预想的结果。

答案:

输出结果第一个为随机数,第二个是98。

 

4、下面这个类声明正确吗?为什么?

?

抱歉!评论已关闭.