C++设计的一个小缺陷——不必强制类普通成员函数在类体中声明

原创 2007年09月23日 20:24:00
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应该早就考虑到了,他是基于什么原因采用的现在的这种方案呢? 

成员函数指针:(结构+与普通函数指针之间的转换)

通过网上查找发现: zailinux
  • liaoyoujinb
  • liaoyoujinb
  • 2014年07月19日 17:18
  • 971

复数类的完整实现(C++版)

如果你想成功就去努力,不要让你的懒惰埋葬了你的梦想
  • qq_34328833
  • qq_34328833
  • 2016年08月04日 07:45
  • 723

C++类的声明和对象的定义

每一个实体都是对象。有一些对象是具有相同的结构和特性的。每个对象都属于一个特定的类型,这个特定的类型称为类(class )。 类代表了某一批对象的共性和特征。前面已说明:类是对象的模板,而对象是...
  • augustusking
  • augustusking
  • 2015年05月15日 09:49
  • 1974

【C++学习与应用总结】2: 关于类型前置声明

本文总结了c++中前置声明的写法及注意事项,列举了哪些情况可以用前置声明来降低编译依赖。...
  • elloop
  • elloop
  • 2015年12月04日 07:51
  • 5307

详解C结构体、C++结构体 和 C++类的区别

先来说说C和C++中结构体的不同 a) C语言中的结构体不能为空,否则会报错 1>d:\myproject\visual studio 2013\projects\myc++\main.c(71): ...
  • Loving_Forever_
  • Loving_Forever_
  • 2016年05月23日 18:38
  • 16523

C++中如何声明 “友元类” 和 “友元函数”

调试平台:win7 vs2012 win32控制台终端项目 友元(friend) 字面义:顾名思义既然是朋友了,我的东西同样可以给你使用 书面语:将一个类的非公有成员(包括方法和成员变量)的访问权限赋...
  • comwise
  • comwise
  • 2013年11月05日 18:57
  • 2818

C++类前置声明解决类之间互相包含的问题

作者:朱金灿 http://blog.csdn.net/clever101       类的前置声明(forward declaration)和包含头文件(#include)的区别常...
  • hewei0241
  • hewei0241
  • 2014年05月02日 21:49
  • 1237

c++中类的申明和定义

基本类型变量是声明和定义(初始化)是同时产生的,也就是说int a,那么同时对a进行声明和初始化。 而对象,是声明与定义分开的。如类A,如果A x;就是一个声明,告诉编译器x是一个A类的对象变量,但是...
  • guomutian911
  • guomutian911
  • 2015年10月17日 09:14
  • 5249

浅析C++中结构体的定义、初始化和引用

以下是对C++中结构体的定义、初始化和引用进行了详细的介绍,需要的朋友可以过来参考下 定义: 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也...
  • steft
  • steft
  • 2017年02月09日 10:49
  • 6186

类声明,解决c++两个类互相包含问题

在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { int i; B b; ...
  • hezijian22
  • hezijian22
  • 2014年05月25日 22:49
  • 2591
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++设计的一个小缺陷——不必强制类普通成员函数在类体中声明
举报原因:
原因补充:

(最多只允许输入30个字)