C和C++面试秘笈六——C++面向对象(1)

一、C++相比C的改进

C语言是过程式编程语言,它以过程为中心,以算法为驱动。

C++是面向对象的编程语言,它是从C语言发展过来的。它以对象为中心,以消息为驱动的编程。

二、class和struct的区别

1、C语言中的struct和C++中的class的区别

在C语言中的struct中只能 定义成员变量,不能定义成员函数。

在C++中的class,可以定义成员变量,同时还可以定义成员函数。

2、C++中的struct和class的区别

在C++中扩充了对struct的用法,我们可以在struct中定义成员变量和成员函数。

区别:

class中的成员访问权限默认是private

struct中的成员访问权限默认是public

三、静态成员变量的使用

这题主要考的是我们对类的静态成员变量的理解。

类的静态成员被当做该类类型的全局变量,静态成员对于每个类的类型来说只有一个复制品,该类类型的所有成员都共享这个静态成员。

但是类的非静态成员对于每个类对象它们都有一个自己的复制品

#include<iostream>

using namespace std;

class Myclass
{
public:
	Myclass(int a, int b, int c);
	void GetNumber();
	void GetSum();
private:
	int A;
	int B;
	int C;
	int Num;
	static int Sum;
};

int Myclass::Sum = 0;

Myclass::Myclass(int a, int b, int c)
{
	A = a;
	B = b;
	C = c;
	Num = A + B + C;
	Sum = A + B + C;

}

void Myclass::GetNumber()
{
	cout << "Num = " << Num << endl;
}

void Myclass::GetSum()
{
	cout << "Sum = " << Sum << endl;
}

int main()
{
	Myclass M(3, 7, 10), N(14, 9, 11);
	M.GetNumber();
	N.GetNumber();
	M.GetSum();
	N.GetSum();

	system("pause");
	return 0;
}

我们在Myclass中定义了一个静态成员变量Sum,因为静态成员变量是该类类型所有成员共享的,所以在定义了N对象之后,它的Sum值就发生了变化,然后打印出来的结果就会和M打印个结果一样,是34。但是Num只是普通的成员变量,所以该类类型的对象都有一份复制品,因此M和N对象打印出来的结果不一样。

四、与全局对象相比,使用静态数据成员有什么优势

1、静态数据成员没有进入程序的全局的名字空间,因此不存在和程序中其他全局名字冲突的可能性

2、使用静态数据成员可以隐藏信息。因为静态成员可以是private成员,而全局变量不能。

五、构造函数和析构函数是否可以被重载

构造函数是可以被重载的。

析构函数是不可以被重载的,因为析构函数只能有一个。

猜你喜欢

转载自blog.csdn.net/y____xiang/article/details/80246632