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"就是类的组合设计方法
 
 
原创粉丝点击