关于面对对象设计的几个问题?

hydralisk 2003-10-15 11:32:12

1. 什么时候设计成类,什么时候设计成函数?
2. 什么时候用静态函数?
3. 什么时候生成对象,调用其中函数,什么时候直接用类中的函数?
比如:
Class A
{
int fun_1();
static int fun_2();
int m_vA;
}

main()
{
int iA;
A *pa=new A;
iA=pa->fun_1();和iA=pa->fun_2();和iA=A::fun_1();的区别
}

谢谢 不知我说清楚了没有
...全文
53 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
langzi8818 2003-10-16
  • 打赏
  • 举报
回复
我觉得静态函数的生成,主要是因为他用到了静态数据成员。而没有改变类的非静态数据成员。
还有就是当函数没有设计到类的非静态数据成员的时候,应该是设成静态得吧,自己理解的,不对多多包涵
langzi8818 2003-10-16
  • 打赏
  • 举报
回复
1。看书吧,当事物共同拥有属性的时候,可以把这些属性封装起来,这时候可以是类了。函数是行为,是发生在属性上的行为
2。
静态函数么,这个我也不是太清楚的说出来,不好意思!
3。当函数是静态的时候(public}时,可以用类名直接调用,就象a;;fun_2();fun_1()就不行了。主要是在this指针上的问题吧,偶理解
langzi8818 2003-10-16
  • 打赏
  • 举报
回复
第一:你写的都不能调用,因为他们是私有的。
改成
Class A
{public:
int fun_1();
static int fun_2();
int m_vA;
}

main()
{
int iA;
A *pa=new A;
iA=pa->fun_1();和iA=pa->fun_2();和iA=A::fun_1();的区别
}
liem 2003-10-16
  • 打赏
  • 举报
回复
类的静态成员特点是:所有实例共享一份拷贝。
类的静态成员函数是只能访问该类静态数据的函数(因为它没有绑定this指针)。如果一个操作不是由实例所施行的,那么就可以将该操作设置为静态函数。
在类中除非是静态函数,否则必须通过其某个实例来调用。
Jinhao 2003-10-16
  • 打赏
  • 举报
回复
Class A
{
public: //这个不能掉
int fun_1();
static int fun_2(A a); //这是静态
private:
int m_vA;
static int m_vB;
}

main()
{
int iA;
A *pa=new A;
iA=pa->fun_1(); //非静态的调用方法
iA=A::fun_2(); //静态的调用方法
}

在静态成员函数的实现中不能直接引用类中说明的非静态成员
int A::fun_2(A a)
{
cout<<a.m_vA<<endl;//访问非静态成员
cout<<m_vB<<endl;//访问静态成员
return 0;
}
langzi8818 2003-10-16
  • 打赏
  • 举报
回复
对阿 ,理解的灭有问题
wangyangcheng 2003-10-16
  • 打赏
  • 举报
回复
Mark.
killua1213 2003-10-16
  • 打赏
  • 举报
回复
类包含了对象的所有的属性和方法(即函数),它是对象的“模具”。对象是类的“实例”,可以由一个类制作出多个实例。类本身并不完成任何操作,它只是定义对象的属性及方法, 而实际的操作则是由它所实例化的对象来完成的。至于函数我就不用多说了。
静态函数是使某个函数只在一个源文件中有效,不能被其他源文件所用。它是有使用范围的,与静态变量有雷同之处。


hydralisk 2003-10-16
  • 打赏
  • 举报
回复
看了一下书 看来我的理解还是有问题 INSIDE C++ OBJECT MODEL说类中的函数都是在类外的 所以不论是一个类的多少个对象 它的函数都是一个副本 非静态和静态在内存中都是一个
hydralisk 2003-10-16
  • 打赏
  • 举报
回复
不好意思 写的时候犯晕 忘写PUBLIC了 呵呵 我看了 INSIDE C++ OBJECT MODEL 书上说静态函数是在类的范围内就可以起作用 一个没有任何对象的类就可以调用 这样它就是唯一的 效率比较高吧 我以前也没有用过静态函数 是这两天看一个程序 它在对数据库操作时大量的使用了静态函数 我才想在这里和大家讨论一下 我想由于要平凡的使用数据库 所以用静态函数这样 内存中只有一个静态函数 速度快 如果是非静态函数的化 由于不断生成对象要建立函数副本 这样速度就慢一些 请大家讨论
roselu 2003-10-16
  • 打赏
  • 举报
回复
学习!关注!
hbDeng 2003-10-16
  • 打赏
  • 举报
回复
本质上讲,结构体+若干操作结构体的函数(1) = 类属性 + 类方法 = 类(2)
在早期没有面向对象语言时人们使用的就是方法(1)
1。所以使用类还是函数的看你是面向过程编程还是面向对象编程。另外如果使用的是C++并且你要实现的功能和具体数据关系不密切时或着要操作多个不同类时,设计成函数实现。
其他时候设计成类实现。
3。你的认识是错误的,如果你学过编译原理,对面向对象语言的编译器有一定了解,你就会知道。不管给一个类定义多少个对象,他们都会调用同一个函数副本。也就是说不管你是生成对象,调用其中函数 或直接调用类的函数 对编译器来说都一样。
houdy 2003-10-16
  • 打赏
  • 举报
回复
设计成类是面向对象的思想,你应该适应这样的思想,试着使用面向对象的思想去解决问题,这样你自然就知道什么时候写成类怎样写,怎样写最好。
在类中,静态函数的含义是:这个不是属于类的对象的,而是属于类的,就想静态的成员变量是属于类的,类的对象公有这个变量。类的静态函数可以用类直接调用,其他的都要先创建对象,当然还要初始化,然后调用。
teddyzhai 2003-10-16
  • 打赏
  • 举报
回复
类和函数差别很大的啊,类是一群数据属性和操作行为的整体集合,函数就只有行为啊!

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧