C++设计的一个小缺陷——不必强制类普通成员函数在类体中声明
2007-09-23 20:24
375 查看
C++设计的一个缺陷,是否应该提交给C++标准委员会呢?——不必强制类普通成员函数在类体中声明
类普通成员函数非得在类中声明了才能在外边写成员函数,C++为什么非得设计成这样呢?
1.如果想增加一个函数,那么同样的函数头要写两遍,这违反了信息唯一原则。造成难于维护难于同步等问题。
2.想在库外为库中的类增加成员函数在目前的这种设计下是不可能的。
比如我想为MFC库的CString类增加一个自定义的tostring()函数就做不到。
我想应该这样设计,类普通成员函数可以直接在外部定义,而不用在类中声明
比如CString类:
直接在我的程序中写
mylib.cpp:
LPTSTR CString::tostring()
{
return (LPTSTR)(LPCTSTR)*this;
}
这样就可以为MFC库中的CString类增加一个tostring成员函数。
--------------------------
usemylib.cpp
...
{
.....
LPTSTR CString::tostring();//用前只要声明一下就可以了,当然可以在一个头文件中集中声明。
str=cstr.tostring();
...
}
这个问题俺闷在心里已经近10年了。
当然,象虚函数这种东西还是必须在类体中声明的。
不过我想这个问题BS应该早就考虑到了,他是基于什么原因采用的现在的这种方案呢?
类普通成员函数非得在类中声明了才能在外边写成员函数,C++为什么非得设计成这样呢?
1.如果想增加一个函数,那么同样的函数头要写两遍,这违反了信息唯一原则。造成难于维护难于同步等问题。
2.想在库外为库中的类增加成员函数在目前的这种设计下是不可能的。
比如我想为MFC库的CString类增加一个自定义的tostring()函数就做不到。
我想应该这样设计,类普通成员函数可以直接在外部定义,而不用在类中声明
比如CString类:
直接在我的程序中写
mylib.cpp:
LPTSTR CString::tostring()
{
return (LPTSTR)(LPCTSTR)*this;
}
这样就可以为MFC库中的CString类增加一个tostring成员函数。
--------------------------
usemylib.cpp
...
{
.....
LPTSTR CString::tostring();//用前只要声明一下就可以了,当然可以在一个头文件中集中声明。
str=cstr.tostring();
...
}
这个问题俺闷在心里已经近10年了。
当然,象虚函数这种东西还是必须在类体中声明的。
不过我想这个问题BS应该早就考虑到了,他是基于什么原因采用的现在的这种方案呢?
相关文章推荐
- C++第六周任务5:解决用一个项目多个文件的方式实现,其中两个类的声明放在一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。体会这样安排的优点。
- c++第四周【任务1】下面设计一个三角形类,请给出各成员函数的定义
- 编写设计一个People(人)类。该类的数据成员有年龄(age)、身高(height)、体重(weight)和人数(num),其中人数为静态数据成员,成员函数有构造函数(People)、进食(Eatt
- 解决方案:静态成员对象的声明在头文件中,函数代码在另外一个文件中,提示链接错误
- C++调用一个成员函数的需求this指针的情况
- c++ 成员函数 普通函数指针转换
- //设计一个点类,其中包含一对坐标点数据成员、一个求两个点之间距离的友元函 //数 dist 和显示坐标点的成员函数,并用数据进行测试
- 11周1--2以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试;
- C++:如何声明和定义成员函数
- C++关于参数为const引用类型的函数调用参数成员函数的一个问题
- 设计一个基类,从基类派生圆,从圆派生圆柱,设计成员函数输出它们的面积和体积
- C++之类的成员函数的调用 vs. 普通函数的调用
- 每日一个C++小程序(十二)--具有静态数据、函数成员的Point类,多文件组织
- 成员函数声明为常量的解释--C++学习笔记
- 类成员声明与定义前加inline的区别(C++ inline 函数)
- 再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高),,以及求圆柱表面积的成员函数area和求圆柱体积的成员函数volume,实现需要的成员函数,并设计main
- 模板类成员函数的定义和声明为什么要放在一个文件中
- C++中通过派生类调用第二基类的普通成员函数时this指针的调整
- 关于“C++ vs2010中声明一个类的函数,提示不兼容”问题
- 模板类成员函数的定义和声明为什么要放在一个文件中