您的位置:首页 > 编程语言 > C语言/C++

C++学习笔记(二)

2013-12-03 11:40 543 查看
1.1构造函数

class Time
{
public:
Time();      //无参构造函数声明
Time(int a,int b);  //有参构造函数声明
}


(1).构造函数在建立对象时自动执行,且只执行一次。

(2).名字与类名相同。

(3).不具有任何类型,不具有返回值。void Time();  是错误的。

(4).构造函数不被对象调用。t1.Time();是错误的。

(5).如果用户没有定义构造函数,系统会自动生成一个构造函数,但函数体是空的,没有参数,不执行任何初始化操作。

1.2析构函数

class Time
{
public:
Time();      //无参构造函数声明
Time(int a,int b);  //有参构造函数声明
……
~Time();    //析构函数声明
}


(1).~是取反运算符。

(2)析构函数是在撤销对象占用的内存之前完成一些清理工作;static局部对象:在main函数结束或调用exit函数结束程序时,调用static局部对象的析构函数;全局对象:

在main函数结束或调用exit函数结束程序时,调用该全局对象的析构函数;new动态建对象:delete运算符释放该对象时,先调用析构函数。

(3).构造函数可有多个,但析构函数只有一个。

(4).构造函数和析构函数的顺序是栈顺序。

 1.3对象数组

Student(int = 1001,int = 18,int  = 60);    //构造函数声明

Student stud[3] = {60, 70,  78};   //定义对象数组

这三个实参分别作为3个对象的实参。所以,在定义数组提供的实参个数不能超过数组元素个数。

1.4对象指针

(1).对象空间的起始地址就是对象的指针。

(2).

class Time
{
public:
Time(int ,int ,int); // 构造函数声明
int  hour;
int  minute;
int    sec;
void    get_time();
};
Time t1(10,36,6);


int *p1 = &t1.hour;    //定义指向整形数据的指针变量p1,并使p1指向t1.hour。

Time  *p2  =  &t1;   // 定义指向Time类对象的指针变量p2,并使p2指向p1;

void (Time ::  *p3) ();    //定义指向Time类共用成员函数的指针变量p3

1.5this指针

this指针是指向本类对象的指针,他的值是当前被调用的成员函数或数据成员所在的对象的起始地址。this指针是隐式使用的,他是作为参数被传递给成员函数的。

例:

int  Box ::volume()                                                            int    Box ::volume()

{                                                                                          {

    return  (height*width*length);    -------------->               return  ( this->height*this->width*this->length);

}                                                                                          }

1.6共用数据的保护

1.6.1常对象

类名  const 对象名【(实参列表)】     或     const   类名  对象名【(实参列表)】

Time  const  ti(7 , 8 , 9);

常对象不能调用该对象的非const型成员函数。

1.6.2对象成员

1.6.2.1常数据成员

const  数据类型  变量名;

const  int  count;

常数据成员只能通过构造函数初始化参数列表,之后不能被再次赋值。

mutable  int  count;把jcount常数据成员声明为可变数据成员,可修改其值 。

1.6.2.2常成员函数

类型名  函数名()   const;

void  get_time ()  const;   //const在()后面

数据成员非const成员函数const成员函数
非const的数据成员可引用,可改变其值可引用,不可改变其值
const数据成员可引用,不可改变其值可引用,不可改变其值
const对象的数据成员不允许引用和改变其值可引用,不可改变其值
1.6.2.3指向对象的常指针
类名  * const 指针变量名 = 对象地址;

指针变量声明为const,指针始终保持其值,不改变。

1.6.2.4指向常对象的指针变量

const  类型名  * 指针变量名;

(1).变量被声明常变量,只能用于指向常变量的指针变量

(2).指向常变量的指针变量也可指向非const变量,此时不能改变指针变量的值。

(3).函数的形参指向非const形变量,实参只能用指向非const变量的指针。

1.7静态成员

在类内声明:

static  类型  变量名;

类外定义:

 数据类型  类名::静态数据成员 = 初值; 

例:

class Box

{

     private :

        static int height;

} ;                                                                                                                                                                                                                                                          
                                                     int  Box::height = 10;

(1).静态数据成员在内存中只占一份空间,属于这个类的这个类的对象共享静态数据成员的值,但值对所有对象都一样。

(2).静态数据成员不属于对象,对象所分配的空间不包括静态数据成员所占的空间。

(3).静态数据成员的初始化只能在类体外进行初始化。

(4).静态数据成员既可以通过对象名引用,也可通过类名来引用。

(5).静态成员函数跟静态数据成员一样,静态数据成员不能访问本类中的非静态成员。

(6).静态成员函数和静态数据成员先于对象存在。

1.8友元

友元函数不被类所有。

#include <iostream>

using namespace std;

class Time;
class Date
{
private:
int year;
int month;
int day;
public:
Date() { }
Date(int ,int ,int);
void disPlay(Time &);
};     //定义一个Date类,成员函数display,形参是Time类对象

class Time
{
private :
int hour;
int minute;
int second;
public:
friend void disPlay(Time &);   //disPlay函数为Time的友元函数
friend void Date::disPlay(Time &);   //声明Time类中的disPlay函数为本类的友元函数
Time(int ,int ,int );
Time(){ }

};
Time::Time(int hour,int minute,int second)   //Time类的构造函数
{
this->hour = hour;
this->minute = minute;
this->second = second;
}
Date::Date(int year,int month,int day)   //Date类的构造函数
{
this->year = year;
this->month = month;
this->day = day;
}

void disPlay(Time &t)    //disPlay构造函数的定义
{
cout<<t.hour<<":"<<t.minute<<":"<<t.second<<endl;
}

void Date::disPlay(Time &t)    //定义Date类的disPlay方法
{
cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
cout<<t.hour<<":"<<t.minute<<":"<<t.second<<endl;
}

int main()
{

Time time(1,2,3);
Date date(1993,8,7);
disPlay(time);   //调用
date.disPlay(time);
return 0;
}


                                                                                                   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息