template<typename T>
class CBTNode
{
public:
T data;
CBTNode* parent,*left,*right;
public:
CBTNode(
T data1 = T(),
CBTNode* parent=NULL,
CBTNode *left=NULL,
CBTNode *right=NULL):data(data1),parent(NULL),left(NULL),right(NULL)
{}
T& operator=(const T& da)
...


- [wukong] 这是钱林松老师的课件摘录的,讲的比这还详细 03/07 19:40
- [wukong] 只是方便用户,对象可以向基本类型那样,进行+-等运算。 03/07 19:38
- [chinatree] 不懂,什么书讲这么详细? 03/07 11:20
- [chinatree] 重载不是相同函数只是参数不同吗?运算符怎么重载?作用是什么? 03/07 11:13
- [tomato] c++的基本思想和java基本差不多,只是有一些细节的差别。 03/05 20:33
- [tomato] 我不是什么老师,只是一个搞技术的程序员。 03/05 20:32
- [tomato] 支持你! 03/04 23:07
- [wukong] 是的,一定努力,多动手,谢谢!!! 03/04 22:52
- [tomato] 明白了C++中的构造函数和析构函数,谢谢博主的这篇博文。嘿嘿。 03/04 22:30
- [tomato] 开始学习C++了?不仅要学习知识还要实验才行。 03/04 22:26
[2012-03-11 21:00] 数据结构之二叉树c++实现
阅读全文 |
评论次数(0) |
浏览次数(392) |
所属类型(C++)
[2012-03-10 15:27] 数据结构之双向链表c++实现
//节点类
template<typename T>
class CNode
{
public:
T data;
CNode* prev,*next;
public:
CNode():data(T()),prev(NULL),next(NULL)
{}
CNode(const T& initdata):data(initdata),prev(NULL),next(NULL)
{
}
T& operator=(const T& da)
{
data = da;
return (this->data);
...
template<typename T>
class CNode
{
public:
T data;
CNode* prev,*next;
public:
CNode():data(T()),prev(NULL),next(NULL)
{}
CNode(const T& initdata):data(initdata),prev(NULL),next(NULL)
{
}
T& operator=(const T& da)
{
data = da;
return (this->data);
...
阅读全文 |
评论次数(0) |
浏览次数(419) |
所属类型(C++)
[2012-03-09 13:43] 数据结构之线性表(数组形式)c++实现
typedef unsigned int UINT;
template<typename T>
class CArrayList
{
public:
enum Status
{
OVERFLOW=-1,
OK=1,
ERROR
};
int m_length;
int m_size;
T *pdata;
bool m_isSorted;
int m_IncreNum;
typedef int (*COMPAREPROC)(T t1,T t2);
public:
CArrayList();
CArrayList(UI...
template<typename T>
class CArrayList
{
public:
enum Status
{
OVERFLOW=-1,
OK=1,
ERROR
};
int m_length;
int m_size;
T *pdata;
bool m_isSorted;
int m_IncreNum;
typedef int (*COMPAREPROC)(T t1,T t2);
public:
CArrayList();
CArrayList(UI...
阅读全文 |
评论次数(0) |
浏览次数(392) |
所属类型(C++)
[2012-03-09 12:38] operator new/delete重载
内存管理的基本要求
用系统默认的 malloc() 分配的内存要交给系统默认的 free() 去释放;
用系统默认的 new 表达式创建的对象要交给系统默认的 delete 表达式去析构并释放;
用系统默认的 new[] 表达式创建的对象要交给系统默认的 delete[] 表达式去析构并释放;
用系统默认的 ::operator new() 分配的的内存要交给系统默认的 ::operator delete() 去释放;
用 placement new 创建的对象要用 placement delete 去析构(其实就是直接调用析构函数);
::operator new() 的两种...
用系统默认的 malloc() 分配的内存要交给系统默认的 free() 去释放;
用系统默认的 new 表达式创建的对象要交给系统默认的 delete 表达式去析构并释放;
用系统默认的 new[] 表达式创建的对象要交给系统默认的 delete[] 表达式去析构并释放;
用系统默认的 ::operator new() 分配的的内存要交给系统默认的 ::operator delete() 去释放;
用 placement new 创建的对象要用 placement delete 去析构(其实就是直接调用析构函数);
::operator new() 的两种...
阅读全文 |
评论次数(0) |
浏览次数(425) |
所属类型(C++)
[2012-03-08 18:12] 数据结构之数组c++实现
typedef unsigned int UINT;
template<typename T>
class CMyArray
{
public:
enum Status
{
OVERFLOW=-1,
OK=1,
ERROR
};
int m_length;
int m_size;
T *pdata;
public:
CMyArray();
CMyArray(UINT n);
void Init(UINT nSize);
void Release();
UINT GetSize();
T Set(UINT n,T...
template<typename T>
class CMyArray
{
public:
enum Status
{
OVERFLOW=-1,
OK=1,
ERROR
};
int m_length;
int m_size;
T *pdata;
public:
CMyArray();
CMyArray(UINT n);
void Init(UINT nSize);
void Release();
UINT GetSize();
T Set(UINT n,T...
阅读全文 |
评论次数(0) |
浏览次数(427) |
所属类型(C++)
[2012-03-06 19:54] 重载
运算符重载
运算符重载使得用户自定义的数据以一种更简洁的方式工作
运算符重载时,运算符函数只能定义为两种方式:
类的成员函数
友员函数
这两种方式非常相似,关键区别在于
成员函数具有 this 指针
友员函数没有 this 指针
用成员函数重载运算符
运算符通过运算符函数重载。
运算符函数是一种特殊的成员函数,语法形式为:
type operator @ ( 参数表 )
{
// 相对于该类定义的操作
}
不能重载的运算符:. , * , :: , ? , sizeof
重载应注意的问题:
...
运算符重载使得用户自定义的数据以一种更简洁的方式工作
运算符重载时,运算符函数只能定义为两种方式:
类的成员函数
友员函数
这两种方式非常相似,关键区别在于
成员函数具有 this 指针
友员函数没有 this 指针
用成员函数重载运算符
运算符通过运算符函数重载。
运算符函数是一种特殊的成员函数,语法形式为:
type operator @ ( 参数表 )
{
// 相对于该类定义的操作
}
不能重载的运算符:. , * , :: , ? , sizeof
重载应注意的问题:
...
阅读全文 |
评论次数(2) |
浏览次数(689) |
所属类型(C++)
[2012-03-06 12:44] 虚函数
多态性是使用不同的对象的相同方法时能产生不同动作
C++支持两种多态性,一种是编译时的多态性,另一种是运行时的多态性
在面向对象的系统中,有两种编译方式,及早期联编和滞后联编
早期联编是指系统在编译时就决定如何确定某一动作
滞后联编是指系统在运行时动态确定某一动作,也称为动态联编
编译时的多态性
编译时的多态性是通过重载函数来实现的。重载函数有下述两种方式:
1 在一个类中说明的重载 :在一个类中说明的重载函数之间,靠所带的参数个数或参数类型的不同加以区分。在编译时系统就可以根据参数上的差异来区分这些函数
2 基类成员函数在派生类中的重载:一种是参数有所差别的重载 ...
C++支持两种多态性,一种是编译时的多态性,另一种是运行时的多态性
在面向对象的系统中,有两种编译方式,及早期联编和滞后联编
早期联编是指系统在编译时就决定如何确定某一动作
滞后联编是指系统在运行时动态确定某一动作,也称为动态联编
编译时的多态性
编译时的多态性是通过重载函数来实现的。重载函数有下述两种方式:
1 在一个类中说明的重载 :在一个类中说明的重载函数之间,靠所带的参数个数或参数类型的不同加以区分。在编译时系统就可以根据参数上的差异来区分这些函数
2 基类成员函数在派生类中的重载:一种是参数有所差别的重载 ...
阅读全文 |
评论次数(2) |
浏览次数(871) |
所属类型(C++)
[2012-03-05 16:07] 继承
继承
引入继承的目的在于为代码重用提供有效手段
一方面使用继承可以重用先前项目的代码,如果原来的代码不能完全满足要求,还可以做少量的修改,满足不断变化的具体应用要求,
另一方面若某个项目使用了几个非常相似或稍有不同的类,就可以通过派生类的继承性达到函数和数据继承的目的
派生类
——从已有类中派生新的类
B类继承A类,或称从类A派生类B
类A称为基类(父类),类B称为派生类(子类)
class 派生类名 :访问控制 基类名
{
数据成员和成员函数声明
};
–访问控制 表示派生类对某个基类的继承方式,使用关键字:
...
引入继承的目的在于为代码重用提供有效手段
一方面使用继承可以重用先前项目的代码,如果原来的代码不能完全满足要求,还可以做少量的修改,满足不断变化的具体应用要求,
另一方面若某个项目使用了几个非常相似或稍有不同的类,就可以通过派生类的继承性达到函数和数据继承的目的
派生类
——从已有类中派生新的类
B类继承A类,或称从类A派生类B
类A称为基类(父类),类B称为派生类(子类)
class 派生类名 :访问控制 基类名
{
数据成员和成员函数声明
};
–访问控制 表示派生类对某个基类的继承方式,使用关键字:
...
阅读全文 |
评论次数(1) |
浏览次数(687) |
所属类型(C++)
[2012-03-05 10:46] 静态成员
静态成员
关键字 static 可以用于说明一个类的成员;
静态成员提供了一个同类对象的共享机制;
把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象都共享这一个 static 成员;
静态成员属于类,它不是属于对象的,不会随对象的消失而消失。
一个类中,若将一个数据成员说明为 static ,则该数据称为静态数据成员,无论创建多少个类对象,都只有一个静态数据的拷贝当这个类的第一个对象被创建时,所有 static 数据初始化为 0 ,并且不作其他初始化。
静态数据成员的使用
1. 用来统计对象的个数;
2. 作为一个标志,指示一个特定...
关键字 static 可以用于说明一个类的成员;
静态成员提供了一个同类对象的共享机制;
把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象都共享这一个 static 成员;
静态成员属于类,它不是属于对象的,不会随对象的消失而消失。
一个类中,若将一个数据成员说明为 static ,则该数据称为静态数据成员,无论创建多少个类对象,都只有一个静态数据的拷贝当这个类的第一个对象被创建时,所有 static 数据初始化为 0 ,并且不作其他初始化。
静态数据成员的使用
1. 用来统计对象的个数;
2. 作为一个标志,指示一个特定...
阅读全文 |
评论次数(1) |
浏览次数(674) |
所属类型(C++)
[2012-03-04 15:19] C++成员初始化列表 的作用
区别“赋值” 和 “初始化”这两个概念:
我们知道普通变量编译器都会默认的替你初始化。他们既能初始化,也能被赋值的,而常量(const)按照其意思只能被初始化,不能赋值。否则与变量就无区别了。所以常量成员(const member)只能用成员初始化列表来完成他们的“初始化”,而不能在构造函数内为他们“赋值”。
我们知道类的对象的初始化其实就是调用他的构造函数完成,如果没有写构造函数,编译器会为你默认生成一个。如果你自定义了带参数的构造函数,那么编译器将不生成默认构造函数。这样这个类的对象的初始化必须有参数。如果这样的类的对象来做另外某个类的成员,那么为了初始化这个成员...
我们知道普通变量编译器都会默认的替你初始化。他们既能初始化,也能被赋值的,而常量(const)按照其意思只能被初始化,不能赋值。否则与变量就无区别了。所以常量成员(const member)只能用成员初始化列表来完成他们的“初始化”,而不能在构造函数内为他们“赋值”。
我们知道类的对象的初始化其实就是调用他的构造函数完成,如果没有写构造函数,编译器会为你默认生成一个。如果你自定义了带参数的构造函数,那么编译器将不生成默认构造函数。这样这个类的对象的初始化必须有参数。如果这样的类的对象来做另外某个类的成员,那么为了初始化这个成员...
阅读全文 |
评论次数(3) |
浏览次数(723) |
所属类型(C++)