C++设计的一个小缺陷——不必强制类普通成员函数在类体中声明
来源:互联网 发布:centos mysql修改密码 编辑:程序博客网 时间:2024/04/26 11:31
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++设计的一个小缺陷——不必强制类普通成员函数在类体中声明
- C陷阱与缺陷中的一个问题——signal函数声明的剖析
- 模板类成员函数的定义和声明为什么要放在一个文件中
- 模板类成员函数的定义和声明为什么要放在一个文件中
- C++模板类的成员函数定义与声明必须在一个头文件中
- 模板类成员函数的定义和声明为什么要放在一个文件中
- 在objective-C类中声明一个数组型成员变量的property
- 在objective-C类中声明一个数组型成员变量的property
- 类的成员函数和普通成员函数的区别
- 类的普通成员函数的指针
- 类的普通成员函数的指针
- 类的普通成员函数的指针
- 虚函数、普通成员函数访问类的数据成员
- 普通类的模板成员函数
- 在类的头文件中声明成员变量和成员函数。
- 静态类成员函数无法访问普通的成员变量
- 在const成员函数中强制的去掉const
- 一个类的成员函数声明为另一个类的友元函数
- ERP实施经验分析:实施策略与组织机构
- 《看》
- 最近看到的一些好的Open Source Project
- 上瘾才是王道
- 爱情可以如此简单
- C++设计的一个小缺陷——不必强制类普通成员函数在类体中声明
- 《自己动手写操作系统》总结(上)
- 安装Solaris后必须要做的十件事情
- 彬月论坛(开源)
- [手纸]6区lm版
- Windows 2003 变慢原因分析及解决
- 查询按键状态的代码的调用
- 为什么我的显示器的刷新频率只有60HZ ?
- script 生成动态时间显示