C++学习笔记(二)

原创 2013年12月03日 11:40:56

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;
}

                                                                                                   

相关文章推荐

C++学习笔记(二)

当调用一个函数时,主调函数将声明中的参数表以逆序压栈(即实参按从右至左的顺序进行压栈) 函数返回的指针应该指向以下变量:指向全局变量 指向静态(static)变量 指向堆上分配的空间(malloc或n...

C++学习笔记二 C++标准库 数组及指针

C++的string跟vector库分别定义了大小可变的字符串和集合。string跟vector往往将迭代器用作配套类型来访问string中的字符或者vector中的元素。string字符串的size...
  • Debugyt
  • Debugyt
  • 2011年01月18日 17:20
  • 935

C++学习笔记(二)

11. 标准库string类型与字符串字面值 两者不是同一种类型,注意区分。 12. string对象的读写 //code string s; cin>>s; cout输入时: 读取并忽略开头所有的空...

C++学习笔记(二)联想容器

概述 C++primer对联想容器的定义如下: A type that holds a collection of objects that supports efficient lookup b...

c++学习笔记(二)

string、vector、bitset对着api就能用的东西,这里笔记只记录c++的语法 string用法博客链接 vector用法博客链接 bitset用法博客连接pointer(指针)数组...

C++学习笔记(二) if语句

C++学习笔记(二)  if语句    if条件语句有三种形式:      1.一般(缺省)形式  if(bool) 语句 #include using namespace std; ...
  • Doobe
  • Doobe
  • 2017年03月27日 19:19
  • 85

C++学习笔记(二)--各数据类型的使用

面向对象编程(OOP)的本质是设计并扩展自己的数据类型。内置的C++类型包括两种:基本类型和符合类型,我们知道,C++ 没有一种整型或者浮点型能够满足左右的编程要求,因此对于这两种数据结构,C++提供...
  • KXZKXZZ
  • KXZKXZZ
  • 2017年06月13日 01:10
  • 111

c++学习笔记

  • 2014年08月25日 17:44
  • 26KB
  • 下载

C++学习笔记--函数指针

  • 2014年07月23日 22:20
  • 4KB
  • 下载

C++学习笔记和面试备考(二, 转)

简述局部作用域,全局作用域和类作用域的异同 一个定义于某模块中的函数的全局作用域是该模块的命名空间,而不是该函数的别名被定义或调用的位置  虽然作用域是静态定义的,在使用时作...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++学习笔记(二)
举报原因:
原因补充:

(最多只允许输入30个字)