1C++类定义
来源:互联网 发布:淘宝卖家如何投诉买家 编辑:程序博客网 时间:2024/04/30 17:56
类定义
(前言,定义,基类与派生类,多重继承,类模板,设计指导)
1.前言
类在C++中简单的说是一个高级数据类型,工作方式如同struct
类设计的基础思想是"数据抽象"和"封装"
"数据抽象"是一种依赖于接口定义和代码实现分离的一种编程设计技术
数据抽象机制产生了一个专门用于类设计的统一建模语言(UML)
UML全称为Unified Modeling Language
UML产生了软件工程领域中的建模软件,最出名的是Rational Rose软件
类的面象对象编程大大改写了传统统的软件工程模式
类的数据抽象和封装的好处
1.1避免类的使用者(程序员)破坏类的内部结构和
1.2类设计者在保持公共接口不变,而修改类的私有部分不用修改到类的用户级代码,方便维护代码
2.定义
class classname [其它]{
public:
memberlist...
private:
memberlist...
protected:
memberlist...
};
3基类与派生类
3.1定义格式:
class classid{...};
3.2代码举例
class sales_item{
public:
double ave_price() const;
bool same_isbn(const sales_item& rhs ) const {return isbn==rhs.isbn;}
sales_item():units_sold(0),revenue(0.0){}; //构造函数用初如化列表
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
3.3虚基类和派生类
面向对象的另一个特点是"多态性",
虚基类是可以直接产生对象的
当一个基类的成员含有virual成员函数时就是一个虚基类,
虚基类的定义一个虚方法,在派生类会产生不同的具体方法,从而让派生类具有多态性质
C++通过基类的引用或者指针调用虚函数时,发生动态绑定,是调用基类成员函数还是派生类成员函数在运行时确定
定义虚基类和派生类格式:
class classid{
public:
virual成员函数定义...
...
};
定义派生类
class 派生类 : public 虚基类{
public:
virual成员函数实现...
....
}
4.多重继承
多重继承和JAVA的接口实现原理一样
多重继承生类格式:
class 派生类 : public 基类1,public 基类2, public 基类n{...};
代码举例
class bear : public bear,public endangered{
....
};
***多重继承会加深类设计的复杂性和增加C++的错误率,建议少用多重继承
5.类模板
template <class type> class 类名{
类代码
....
};
***类模板具体在模板知识栏目讲解
6.设计指导
6.1.从编程的角度来说,类的用户最好分成类设计者和类使用者两类用户
.类的设计者:
专注于类的设计和收集类的使用者们的反馈而不断完善类,定义直观和易用的接口是他们的主要工作;
类的访问标记(public,private,protected)实施类的抽象和封装
.类的使用者:
如何更好的使用类的public,protected接口就是他们的主要工作
6.2编译器为类自动添加的4个成员函数
如一个空类定义后,C++编译器会自动为我们添加另4个成员函数
如class empty{};
编译器为翻译成
class empty{
public:
empty(){...} //default构造函数
empty(const empty& rhs){...} //copy构造函数
empty& operator=(const empty& rhs){...} //copy赋值函数
~empty(){...} //析构函数
};
6.3明确拒绝编译器自动生成的函数
当不想让编译器自动生成4个成员函数,我们可以把他们放在private中只声明不实现就OK啦
class A{
public:
...
private:
...
A(const A&); //copy构造函数被禁用
A& operator=(const A&);//copy赋值函数被禁用
};
6.3当基类有virtual成员函数时,此类具有多态时,类的析构函数也应该设计成virtual析构函数
class Timekeeper{
public:
Timekeeper();
virsual ~Timekeeper();
...
};
Timekeeper * ptk=gettimekeeper();
...
delete ptk; //OK
在base class一个virual析构函数, 此后删除derived class对象就会自动销毁整个对象,
包括所有derived class对象,以达到清除所有对象不产生内存泄露
6.4类的设计中要知道区分"is-a"和"has-a"两种类设计模式
"is-a":基类与派生类的public继承关系要符合"is-a"(是一种)的关系,"is-a"是类的继承设计方法
"has-a":是指设计一个新类时,类的成员是由其它类组合而成的,"has-a"就是类的组合设计方法
- Object-C 类定义
- 矩形类定义【C++】
- 矩形类定义【C++】
- objective c 学习:定义类
- Objective-C 类的定义
- obj-c 定义一个类
- C#—类、接口定义
- C#—集合类定义
- [C++]类的定义 class
- c++_2: 类的定义
- Object C 类的定义
- C语言指针1-定义
- C语言-数组-1定义
- (C++)类与对象2-1 Point类的定义
- C++(1)类和对象——定义
- C-定义
- [c/c++]宏定义,#,##
- [c/c++]宏定义,#,##
- 虚拟化联盟开年上线
- 通过javascript访问web控件的自定义属性
- J2EE开发之常用开源项目介绍
- 数据窗口的单双行显示颜色不同
- ASP.NET之父Scott Guthrie介绍
- 1C++类定义
- 日本人骑着22的自行车就上了高速!
- ASP.NET之父Scott Guthrie做客微软北京.NET俱乐部
- 2.C++类this指针
- 在Visual Studio环境中开发PHP项目
- 3.C++类对象
- ReportX实例(3)VB
- 4.C++类作用域
- Ajax--------收发 json 数据