c++之类的设计
2006-05-08 17:05
148 查看
c++学习之设计类
(1)设计类
1 一些类涉及规则
类的声明放在.h文件,实现放在.cpp文件里,inline类型的成员函数可以在.h文件后面实现,通常把短小不常修改的
函数设计为inline类型
为了避免多重包含,可以使用
#ifndef DATE_H
#define DATE_H
//THE contents of date.h
#endif
和语言本身自带的数据类型(int)不同,类也是一种用户自定义的数据类型
类成员可见性的规定,数据成员通常private以确保封装要求,提供getdata和setdata函数来给予外部访问成员
成员函数一般要求公有
类对象的作用域:auto对象作用域开始于定义的地方,结束于该语句块
extern对象在程序运行的时候存在,在程序结束时消失
static对象的作用域和anto一样,但是生存时间和extern 一样
一般都要初始化类的成员数据,具有默认参数的构造函数box::box(int ht = 1){height = ht;},这个比较常用
2 类的转换
(1)转换改造函数
date::date(char s)
{
da = s;//int da
//在构造函数中进行数据类型的转换,初始化类的成员数据
}
(2)成员转换函数date::operator long()
{
//当将data类型的转换成long 类型的时候,编译器隐式调用该函数
//和c++内建数据类型的double转换成float一样的道理
//还可以进行类对象之间的转换
}
date::date(const &jd)
{
//转换构造函数
}
date::operator customdate()
{
//将date转换成customdate类型
//需要一个引用对象作为参数
}
转换发生的情形:
函数参数
初始化
返回值
表达式语句
说明类可以通过转换参与表达式运算
3 this指针
当类的某个非静态成员函数执行时,就会存在this指针,他指向该成员函数的对象。this指针总是作为隐含参数传递成员函数,
当程序调用每个对象的成员函数时,编译器就会把该对象的地址加到参数列表。对任何成员的调用都隐式的使用了this指针。
data& date:: operator= (const date& dt)
{
if (this != &dt)//确保对象不会自己给自己赋值
{
开始赋值;
delete m//m是指针类型;把原来的指针释放
if(dt.m != 0){m = new char;//判断指针哟没有初始化
strcpy(m,dt.m);//新的指针
}else m = 0;
}
return *this
}
4 重载赋值转换函数
当类中存在指针或者引用时,用=进行类对象的赋值可能会导致两个类对象共用一个数据成员,当一个类对象
不在作用域时,会调用析构函数删除分配的空间,会导致另一个对象的成员指向空。所以有必要重载赋值运算符
void date:: operator= (const date& dt)
{
if (this != &dt)//确保对象不会自己给自己赋值
{
开始赋值;
delete m//m是指针类型;把原来的指针释放
if(dt.m != 0){m = new char;//判断指针哟没有初始化
strcpy(m,dt.m);//新的指针
}else m = 0;
}
}
5 静态成员
即使没有任何实例,静态成员也是存在的,他相当于一个全局变量,所有该类的实例都可以调用他。静态成员函数通常
是用在需要访问静态成员,他没有this指针,无法访问非静态成员。如果一个静态成员是公有的,那么在整个他的作用域都可
以访问他,而且不需要类的实例的存在。访问方式:类名::成员名
6 复制构造函数
date::date(const date& dt)
{
//开始赋值
}
如果类成员有引用类型的,那么在构造函数中必须对他进行初始化。
常量对象不可以调用非常量函数,因为编译器只看函数的声明。
(1)设计类
1 一些类涉及规则
类的声明放在.h文件,实现放在.cpp文件里,inline类型的成员函数可以在.h文件后面实现,通常把短小不常修改的
函数设计为inline类型
为了避免多重包含,可以使用
#ifndef DATE_H
#define DATE_H
//THE contents of date.h
#endif
和语言本身自带的数据类型(int)不同,类也是一种用户自定义的数据类型
类成员可见性的规定,数据成员通常private以确保封装要求,提供getdata和setdata函数来给予外部访问成员
成员函数一般要求公有
类对象的作用域:auto对象作用域开始于定义的地方,结束于该语句块
extern对象在程序运行的时候存在,在程序结束时消失
static对象的作用域和anto一样,但是生存时间和extern 一样
一般都要初始化类的成员数据,具有默认参数的构造函数box::box(int ht = 1){height = ht;},这个比较常用
2 类的转换
(1)转换改造函数
date::date(char s)
{
da = s;//int da
//在构造函数中进行数据类型的转换,初始化类的成员数据
}
(2)成员转换函数date::operator long()
{
//当将data类型的转换成long 类型的时候,编译器隐式调用该函数
//和c++内建数据类型的double转换成float一样的道理
//还可以进行类对象之间的转换
}
date::date(const &jd)
{
//转换构造函数
}
date::operator customdate()
{
//将date转换成customdate类型
//需要一个引用对象作为参数
}
转换发生的情形:
函数参数
初始化
返回值
表达式语句
说明类可以通过转换参与表达式运算
3 this指针
当类的某个非静态成员函数执行时,就会存在this指针,他指向该成员函数的对象。this指针总是作为隐含参数传递成员函数,
当程序调用每个对象的成员函数时,编译器就会把该对象的地址加到参数列表。对任何成员的调用都隐式的使用了this指针。
data& date:: operator= (const date& dt)
{
if (this != &dt)//确保对象不会自己给自己赋值
{
开始赋值;
delete m//m是指针类型;把原来的指针释放
if(dt.m != 0){m = new char;//判断指针哟没有初始化
strcpy(m,dt.m);//新的指针
}else m = 0;
}
return *this
}
4 重载赋值转换函数
当类中存在指针或者引用时,用=进行类对象的赋值可能会导致两个类对象共用一个数据成员,当一个类对象
不在作用域时,会调用析构函数删除分配的空间,会导致另一个对象的成员指向空。所以有必要重载赋值运算符
void date:: operator= (const date& dt)
{
if (this != &dt)//确保对象不会自己给自己赋值
{
开始赋值;
delete m//m是指针类型;把原来的指针释放
if(dt.m != 0){m = new char;//判断指针哟没有初始化
strcpy(m,dt.m);//新的指针
}else m = 0;
}
}
5 静态成员
即使没有任何实例,静态成员也是存在的,他相当于一个全局变量,所有该类的实例都可以调用他。静态成员函数通常
是用在需要访问静态成员,他没有this指针,无法访问非静态成员。如果一个静态成员是公有的,那么在整个他的作用域都可
以访问他,而且不需要类的实例的存在。访问方式:类名::成员名
6 复制构造函数
date::date(const date& dt)
{
//开始赋值
}
如果类成员有引用类型的,那么在构造函数中必须对他进行初始化。
常量对象不可以调用非常量函数,因为编译器只看函数的声明。
相关文章推荐
- C++设计模式[九]外观模式
- c++ 之类的前置声明
- 设计模式C++学习笔记之十七(Chain of Responsibility责任链模式)
- C++课程设计:职工综合信息管理系统
- 【设计】单例模式--C++源代码(VS2015)
- C++设计模式——单例模式
- C++设计模式-----状态模式
- C02-程序设计基础提高班(C++)第7周上机任务-指针
- 设计模式——组合模式(C++)
- C++[类设计]使用数组实现顺序栈
- “C++程序设计”课程综合设计题目
- C++课程设计-银行储蓄系统
- c++设计模式之中介者模式
- C++课程设计作业,第八题
- C++设计模式---观察者
- Primer plus C++ 第十章 对象和类_类的设计进化_构造与析构
- c++ 之类的前置声明
- 设计模式——桥接模式(C++)
- 常见设计模式的解析和实现(C++)之九—Decorator模式
- C++中智能指针的设计和使用