由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 设计一种c++语言的新特性
相关主题
数组问题用数组做参数,在函数内部如何知道数组的size?
请教c++里函数调用的问题在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)
问个template我这个C++程序有没有什么问题啊?请指点。。。谢谢。。。
大家看看这个简单的qsort排序的问题C++ template preprocessor
问个g++的问题问个hash函数问题
关于placement new请教c++ 类 内外的 同名函数问题
大侠们救命, C++ operator new 问题求助,如何才能将一个c++对象封装成一个函数指针。
大家新年好。 请教一个 c interview question当某个函数被调用的时候,需要定义一个宏
相关话题的讨论汇总
话题: 定义话题: 头文件话题: 函数话题: void话题: class
进入Programming版参与讨论
1 (共1页)
p*****y
发帖数: 1049
1
c++语言委员会曾经讨论过类似于java和d语言的import module 的方案。
然而最终决定暂不将其加入c++17的目标中。原因是macro无法回避。
我思考c++语言的一种折中的新特性。
众所周知,c++的类定义存在一个严重的缺陷。类必须定义在头文件里面,这样就不
得不暴露私有成员,无法实现真正意义上的封装。
举例子 :
在c++语言里,可以在头文件中如此声明一个函数
void foo();
然后在cpp文件中定义这个函数。
但是在c++语言中,只能如此定义一个类:
class A
{
public:
void foo();
private:
int I;
}
这样私有成员就被暴露在头文件里面。违反了封装的基本原则。
我提议一种c++的新特性:允许分次定义一个类。
在头文件里,可以定义类的一部分。在cpp文件里面,可以定义类的另外一部分。
两部分不能互相冲突,不能有所重叠。
例如 在A.h里可以定义:
class A
{
public:
void foo();
}
然后在A.cpp 文件里定义
class A
{
public:
void function_user_cannot_see();
private:
int I;
}
这样子,在 A.h里面的所有函数,不能看到I的存在,直到在I定义之后. 调用A.h的用
户,也看不到void function_user_cannot_see(); 哪怕这个函数是public函数。.cpp
文件里面定义的函数不可以为虚函数。
这样的好处就在于,一个类的私有变量真正实现了封装。
编译器实现这个功能其实很容易,只需要使用pimpl即可。将所有用户不希望看到的成
员定义在一个class B里面,然后把A在头文件里定义为
Class A
{
B * B_is_implementaion_that_user_cannot_See;
Public:
Void foo();
}
h**6
发帖数: 4160
2
sizeof(A)怎样实现?
p*****y
发帖数: 1049
3
sizeof 必须在link之后才能得到
比如如果#include 然后link A.lib
这时候才能得到sizeof(A)
这样可以吗?

【在 h**6 的大作中提到】
: sizeof(A)怎样实现?
t**8
发帖数: 4527
4
Current C++ already supports this feature
publish Interface class only, all other classes are hidden.
User can only call interface function to access the object
另外, 封装有什么用吗?
封装不是加密, 只是提醒使用者, 不要引用或改变私有变量
并不是对用户保密

【在 p*****y 的大作中提到】
: c++语言委员会曾经讨论过类似于java和d语言的import module 的方案。
: 然而最终决定暂不将其加入c++17的目标中。原因是macro无法回避。
: 我思考c++语言的一种折中的新特性。
: 众所周知,c++的类定义存在一个严重的缺陷。类必须定义在头文件里面,这样就不
: 得不暴露私有成员,无法实现真正意义上的封装。
: 举例子 :
: 在c++语言里,可以在头文件中如此声明一个函数
: void foo();
: 然后在cpp文件中定义这个函数。
: 但是在c++语言中,只能如此定义一个类:

p*****y
发帖数: 1049
5
封装是为了在不变更头文件的情况下,可以变更库文件

【在 t**8 的大作中提到】
: Current C++ already supports this feature
: publish Interface class only, all other classes are hidden.
: User can only call interface function to access the object
: 另外, 封装有什么用吗?
: 封装不是加密, 只是提醒使用者, 不要引用或改变私有变量
: 并不是对用户保密

t**8
发帖数: 4527
6
那就用interface 吧
没有任何private 的东西

【在 p*****y 的大作中提到】
: 封装是为了在不变更头文件的情况下,可以变更库文件
r*******n
发帖数: 3020
7
PIMPL idiom 是干这个的

【在 p*****y 的大作中提到】
: c++语言委员会曾经讨论过类似于java和d语言的import module 的方案。
: 然而最终决定暂不将其加入c++17的目标中。原因是macro无法回避。
: 我思考c++语言的一种折中的新特性。
: 众所周知,c++的类定义存在一个严重的缺陷。类必须定义在头文件里面,这样就不
: 得不暴露私有成员,无法实现真正意义上的封装。
: 举例子 :
: 在c++语言里,可以在头文件中如此声明一个函数
: void foo();
: 然后在cpp文件中定义这个函数。
: 但是在c++语言中,只能如此定义一个类:

d****n
发帖数: 12461
8
现在有没有预编译器已经可以在编译之前立即生成头文件的啊?
x****u
发帖数: 44466
9
微软自己早加了import
只要你的dll里面有tlb,剩下的一切都自动生成,header包含,智能指针的宏都有

【在 p*****y 的大作中提到】
: c++语言委员会曾经讨论过类似于java和d语言的import module 的方案。
: 然而最终决定暂不将其加入c++17的目标中。原因是macro无法回避。
: 我思考c++语言的一种折中的新特性。
: 众所周知,c++的类定义存在一个严重的缺陷。类必须定义在头文件里面,这样就不
: 得不暴露私有成员,无法实现真正意义上的封装。
: 举例子 :
: 在c++语言里,可以在头文件中如此声明一个函数
: void foo();
: 然后在cpp文件中定义这个函数。
: 但是在c++语言中,只能如此定义一个类:

1 (共1页)
进入Programming版参与讨论
相关主题
当某个函数被调用的时候,需要定义一个宏问个g++的问题
请教:函数后面的 throw() 有意义么?关于placement new
面试问题大侠们救命, C++ operator new 问题
问一个面试题大家新年好。 请教一个 c interview question
数组问题用数组做参数,在函数内部如何知道数组的size?
请教c++里函数调用的问题在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)
问个template我这个C++程序有没有什么问题啊?请指点。。。谢谢。。。
大家看看这个简单的qsort排序的问题C++ template preprocessor
相关话题的讨论汇总
话题: 定义话题: 头文件话题: 函数话题: void话题: class