首页 > 编程语言 > 详细

C++:类和对象

时间:2017-03-06 15:00:35      阅读:306      评论:0      收藏:0      [点我收藏+]

1.基本概念

  类是具有相同属性和行为的对象的抽象集合,是对象的模板,对象是类的实例化。

  类包含成员函数(行为)和数据(属性)两个部分,一般成员函数作为接口,而数据作为某些成员函数的操作对象,通常是对外不可见的(私有的)。

  类通过对数据的封装、隐藏,增强了安全性并简化了编程,模块化程度相对应C来说更高。

2.基本形式

class name  //name是类名
{

	public:
	/*
		公有数据成员和公有成员函数
		对类的对象和它派生的子类是可见的
	*/
	int publicData;  //数据成员
	void publicFun1();  //成员函数
	void publicFun2(){cout<<"publicFun2\n";}  //在类的内部进行成员函数定义
		
	private:
	/*
		私有数据成员和私有成员函数
		对类的对象和它派生的子类是不可见的,但是对友元函数和友元类是可见的
	*/
	int privateData;
	void privateFun1();
	void privateFun2(){cout<<"privateFun2\n";}
	
	protected:
	/*
		保护数据成员和保护成员函数
		对类的对象不可见,对它派生的子类是可见的,对友元函数和友元类是可见的
	*/
	int protectedData;
	void protectedFun1();
	void protectedFun2(){cout<<"protectedFun2\n";}
}
void name::publicFun1() //在类的外部进行成员函数定义
{
	cout<<"publicFun1\n";}
}

3.构造函数和析构函数

  当建立一个对象时,它的数据成员是不确定的,类中提供了一种初始化的方法,就是构造函数。

  构造函数是没有返回值的,并且函数名和类名一致,允许重载、带默认值。

  构造函数需要public,但不能像其他成员函数一样显式调用,它在定义对象的同时被系统自动调用。

  若没有定义构造函数,则系统自动生成一个不带参数的默认构造函数。

-----------------------------------------------------------------------------------

  析构函数和构造函数相反,在释放对象前自动做一些清理工作。

  析构函数名和类名相同,不过要在函数前加一个波浪号(~),并且析构函数不能带参数。

  析构函数需要声明在public中,可以显式调用,也可以系统自动调用,当对象的生命周期结束时,系统会自动析构。

  例子:

//示例1
#include <iostream>
using namespace std;

class A
{
private:
	int a;  
	int b;
	static int cnt; // 静态数据成员
	int cnt_;
	
public:
	A(){  /*默认构造函数*/
		a = 1; 
		b = 1; 
		cnt_=cnt++;
		cout << "here is A() " << a << "," << b << endl;
	}
	A(int ta){  /*重载了A()*/
		A::a = ta; 
		A::b = 1; 
		cnt_ = cnt++;
		cout << "here is A(int ta) " << a <<","<< b << endl;
	}
	A(int ta, int tb) :a(ta), b(tb){   /*使用参数列表赋值*/
		cnt_ = cnt++;
		cout << "here is A(int a,int b) " << a << "," << b << endl;
	}

	~A(){ cout << "here is ~A() "<< cnt_ << endl; } /*析构函数*/


};
 int A::cnt = 0; // 静态数据成员要在类外定义

int main()
{
	A a; //使用默认构造函数 
	A b(2); //显式调用构造函数 A(int ta)
	A c(1, 2); //显式调用构造函数 A(int ta,int tb)
	
	return 0;
}

 输出:

here is A() 1,1
here is A(int ta) 2,1
here is A(int a,int b) 1,2
here is ~A() 2
here is ~A() 1
here is ~A() 0

  注意析构函数的调用顺序。

4.静态成员

  (1).静态数据成员

  静态数据成员在内存中只有一个拷贝,是所有对象共享的,而其他的数据成员在每个对象中都有一个拷贝。  

  静态数据成员需要在类外定义。

  示例如上面的示例1,在每个对象的析构函数中打印静态数据成员cnt,可以发现cnt是不同的。

  (2).静态成员函数

  静态成员函数只可以使用类的静态成员(数据和函数),若要使用非静态成员,需要通过对象来引用。

//示例2
#include <iostream>
using namespace std;

class A
{
private:
	int a;
	static int b;
	
public:
	A(){ a = 1; b = 2; }
	void fun1(){ cout << a << "," << b << endl; }
	//static void fun2(){ cout << a << "," << b << endl; } // Error:非静态成员引用必须与特定对象相对
	static void fun2(){ cout << b << endl; } //只可以使用静态数据成员
	static void fun3(A ta){ cout << ta.a << "," << b << endl; } // 通过对象引用非静态数据成员

};
int A::b = 0;

int main()
{
	A a;
	A t;
	a.fun1();
	a.fun2();
	a.fun3(t);

	return 0;
}

 

---未完---

C++:类和对象

原文:http://www.cnblogs.com/whlook/p/6509465.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!