- 浏览: 256649 次
- 性别:
- 来自: 宁波
最新评论
-
ydqwtt:
但是我的Java Source File中显示的是*.clas ...
MyEclipse6.5 注释乱码 -
BlueDream348:
谢谢。。收益了
SOAP -
2838938:
学习一下
Oracle监听器安装与配置 -
luorongda:
满足范式要求的数据库设计是结构清晰的,同时可避免数据冗余和操作 ...
数据库设计 -
meteormatt:
这篇文章写的不错.但是排版不怎么好.
Panel和PlaceHolder的区别
文章列表
派生类的3中继承方式
- 博客分类:
- C++
1. 公有继承(public)
公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的。
2. 私有继承(private)
私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
3. 保护继承(protected)
保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。
对于公有继承方式:
...
- 2009-05-05 14:39
- 浏览 1229
- 评论(0)
1.顺序表类型定义
#define ListSize 100 //表空间的大小可根据实际需要而定,这里假设为100
typedef int DataType; //DataType的类型可根据实际情况而定,这里假设为int
...
- 2009-05-05 09:10
- 浏览 1413
- 评论(0)
1。覆盖函数,即在子类中用相同的函数名和签名重写父类的方法,虚函数,在子类中用相同的函数名和签名重写父类的方法(前面有virtual关键字)。如下
class Father
{
public:
void FunctionA() const
{
cout << &quo ...
- 2009-05-04 21:34
- 浏览 2658
- 评论(0)
第一部分:宏
为什么要使用宏呢?
因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地
址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来
保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。
而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。
但是宏也有很多的不尽人意的地方。
1、宏不能访问对象的私有成员。
2、宏的定义很容易产生二意性。
我们举个例子:
#define squar ...
- 2009-05-04 10:55
- 浏览 1016
- 评论(0)
所有的对象都是实例成员变量。它们的最大特色是:如果所属的对象没有被创建,它们也就不存在。
如果在类的外部使用它,需要先创建一个对象,然后通
过"对象名.变量名"来访问。在类的内部,实例成员方法 ...
- 2009-05-04 10:32
- 浏览 2215
- 评论(0)
2.5 其它建议
(1)不要编写一条过分复杂的语句,紧凑的C++/C 代码并不见到能得到高效率的机器代码,却会降低程序的可理解性,程序出错误的几率也会提高。
(2)不要编写集多种功能于一身的函数,在函数的返回值中,不要将正常值和错误标志混在一起。
(3)不要将BOOL 值TRUE 和FALSE 对应于1 和0 进行编程。大多数编程语言将FALSE定义为0,任何非0 值都是TRUE。Visual C++将TRUE 定义为1,而Visual Basic 则将TRUE定义为-1。示例程序如下:
BOOL flag;
…
if(flag) { // do something ...
- 2009-05-03 10:23
- 浏览 905
- 评论(1)
2.3 new、delete 与指针
在C++中,操作符new 用于申请内存,操作符delete 用于释放内存。在C
语言中,函数malloc 用于申请内存,函数free 用于释放内 存。由于C++兼容C 语言,所以new、delete、malloc、free
都有可能一起使用。new 能比 ...
- 2009-05-03 10:20
- 浏览 720
- 评论(0)
2 良好的编程风格
内功深厚的武林高手出招往往平淡无奇。同理,编程高手也不会用奇门怪招写程序。良好的编程风格是产生高质量程序的前提。
2.1 命名约定
有不少人编程时用拼音给函数或变量命名,这样做并不能说明你很爱国,却会让用此程序的人迷糊(很多南方人不懂拼音,我就不懂)。程序中的英文一般不会太
复杂,用词要力求准确。匈牙利命名法是Microsoft 公司倡导的[Maguire
1993],虽然很烦琐,但用习惯了也就成了自然。没有人强迫你采用何种命名法,但有一点应该做到:自己的程序命名必须一致。
以下是我编程时采用的命名约定:
(1)宏定义用大写字母加下划线表 ...
- 2009-05-03 10:18
- 浏览 968
- 评论(0)
1.3 虚函数与多态
除了继承外,C++的另一个优良特性是支持多态,即允许将派生类的对象当作基类的对象使用。如果A 是基类,B 和C 是A 的派生类,多态函数Test 的参数是A 的 指针。那么Test 函数可以引用A、B、C 的对象。示例 ...
- 2009-05-03 10:15
- 浏览 988
- 评论(0)
1.2 继承与组合
如果A 是基类,B 是A 的派生类,那么B 将继承A 的数据和函数。示例程序如下:
class A
{
public:
void Func1(void);
void Func2(void);
};
class B : public A
{
public:
void Func3(void);
void Func4(void);
};
// Example
main()
{
B b; // B的一个对象
b.Func1(); // B 从A 继承了函数Func1
b.Func2(); // B 从A 继承了函数Func2
b.Func3 ...
- 2009-05-03 10:13
- 浏览 934
- 评论(0)
C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。
许多教科书都把计算机阶乘和菲波那契数列用来说明递归,非常不幸我们可爱的著名的老潭老师的《C语言程序设计》一书中就是从阶乘 ...
- 2009-05-03 08:59
- 浏览 7410
- 评论(0)
由于编程的习惯,动态管理内存的时候总是用new/delete,malloc/free很少使用,两者之间的区别就不是很清楚了。
1. 本质区别
malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。
对
于用户自定义的对象而言,用maloc/free无法满足动态管理对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此
C++需要一个能完成动态内存分配和初始化工作的运算符new,以 ...
- 2009-05-02 21:16
- 浏览 2031
- 评论(0)
一. 回顾指针概念:
早在本系列第二篇中我就对指针的实质进行了阐述。今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧!
当我们程序如下申明变量:
short int i;
char a;
short int * pi;
程序会在内存某地址空间上为各变量开辟空间,如下图所示。
内存地址→6 7 8 9 10 11 12 13 14 15
---------------------------------------------------------------------------- ...
- 2009-04-30 21:38
- 浏览 869
- 评论(0)
其实,C/C++等编程语言之所以难懂,是因为,中国人特别是有点文化的人,素来喜欢用简化语。就象某年春晚相声中,将简化语大做批判,其中“上海吊车厂的人员”简称为“上吊的”一样。
指针数组和数组指针,简化的象术语一样。C/C++本来就没有那么多的术语,人为增加术语,只会使C/C++更加晦涩难懂。
直接称呼全称,估计问题就解决了:
用于存储指针的数组、指向数组的指针
指针数组,故名思义,就是指针的数组,数组的元素是指针;
数组指针,同样,就是直想数组的指针。
简单举例说明:
int *p[2]; 首先声明了一个数组,数组的元素是int型的指 ...
- 2009-04-30 21:17
- 浏览 925
- 评论(0)
【函数指针】
在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。
1.函数指针定义
函数类型 (*指针变量名)(形参列表);
“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。
例如:
int (*f)(int x);
double (*ptr)(double x);
在定义函 ...
- 2009-04-30 21:02
- 浏览 1131
- 评论(0)