C++学习笔记(二)
2013-12-03 11:40
543 查看
1.1构造函数
(1).构造函数在建立对象时自动执行,且只执行一次。
(2).名字与类名相同。
(3).不具有任何类型,不具有返回值。void Time(); 是错误的。
(4).构造函数不被对象调用。t1.Time();是错误的。
(5).如果用户没有定义构造函数,系统会自动生成一个构造函数,但函数体是空的,没有参数,不执行任何初始化操作。
1.2析构函数
(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).
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在()后面
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友元
友元函数不被类所有。
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对象的数据成员 | 不允许引用和改变其值 | 可引用,不可改变其值 |
类名 * 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; }
相关文章推荐
- 嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 )
- C++学习笔记(一)
- C++ 中的成员对象(学习笔记)
- C++学习笔记(六)
- C++学习笔记--函数对象
- C++学习笔记【第二部分第八章:IO类】
- 【C++】学习笔记草稿版系列2(函数重载)
- c++学习笔记(四):函数按指针调用和按引用调用
- C++学习笔记(三)C++中cstring类的用法和应用实例
- VC++ 学习笔记(三):摩登之路——C++/CLI简介
- C++ primer 学习笔记——向 量
- C++ 学习笔记
- C++学习笔记(四)--指针(1)
- 吃烧烤之命令模式学习笔记[C++版]
- C++数组初始化规则的学习笔记
- C++学习笔记之关键字
- C++ 基础学习笔记(一)
- 设计模式C++学习笔记之一(Strategy策略模式)
- 【C++】学习笔记草稿版系列4(C++内存管理)
- C++虚函数表学习笔记