我是一名试图学习C++的JAVA开发人员,但我真的不知道标准函数声明的最佳实践是什么。
在班级中:
class Clazz
{
public:
void Fun1()
{
//do something
}
}
或外部:
class Clazz
{
public:
void Fun1();
}
Clazz::Fun1(){
// Do something
}
我有一种感觉,第二个可能不太好读…
发布于 2012-01-31 15:43:49
C++是面向对象的,因为它支持软件开发的面向对象范例。
然而,与Java语言不同的是,C++不会强制您在类中对函数定义进行分组:声明函数的标准C++方法是只声明一个函数,而不使用任何类。
相反,如果您谈论的是方法声明/定义,那么标准方法是将声明放入一个包含文件(通常命名为.h
或.hpp
),将定义放入一个单独的实现文件(通常命名为.cpp
或.cxx
)。我同意这确实有点烦人,需要一些重复,但这就是语言的设计方式。
对于快速实验和单个文件项目,任何东西都可以工作……但对于更大的项目,这种分离实际上是必需的。
注意:即使您了解Java,C++也是一种完全不同的语言……这是一种无法通过实验学习的语言。原因是它是一种相当复杂的语言,有很多不对称和明显不合逻辑的选择,最重要的是,当你犯了错误时,没有像Java那样的“运行时错误天使”来拯救你……但是有一些“未定义的行为守护进程”。
学习C++的唯一合理方法是通过阅读……无论你有多聪明,你都无法猜到委员会的决定(实际上聪明有时甚至是一个问题,因为正确的答案是不合逻辑的,也是历史传统的结果)。
只需挑选一两个good book,然后从头到尾地阅读它们。
发布于 2012-01-31 19:47:15
函数定义在类之外更好。这样,如果需要,您的代码可以保持安全。头文件应该只给出声明。
假设有人想使用你的代码,你可以给他你的类的.h文件和.obj文件(编译后获得)。他不需要.cpp文件就可以使用您的代码。
这样,其他任何人都看不到您的实现。
发布于 2013-10-14 13:09:44
“类内”(I)方法与“类外”(O)方法的作用相同。
但是,当一个类仅在一个文件(在.cpp文件中)中使用时,可以使用(I)。(O)在头文件中使用。cpp文件始终被编译。当你使用#include "header.h“时,头文件会被编译。
如果在头文件中使用(I),则每次包含#include "header.h“时都会声明函数(Fun1)。这可能导致多次声明相同的函数。这很难编译,甚至会导致错误。
正确用法示例:
File1:"Clazz.h“
//This file sets up the class with a prototype body.
class Clazz
{
public:
void Fun1();//This is a Fun1 Prototype.
};
File2:"Clazz.cpp“
#include "Clazz.h"
//this file gives Fun1() (prototyped in the header) a body once.
void Clazz::Fun1()
{
//Do stuff...
}
File3:"UseClazz.cpp“
#include "Clazz.h"
//This file uses Fun1() but does not care where Fun1 was given a body.
class MyClazz;
MyClazz.Fun1();//This does Fun1, as prototyped in the header.
File4:"AlsoUseClazz.cpp“
#include "Clazz.h"
//This file uses Fun1() but does not care where Fun1 was given a body.
class MyClazz2;
MyClazz2.Fun1();//This does Fun1, as prototyped in the header.
File5:"DoNotUseClazzHeader.cpp“
//here we do not include Clazz.h. So this is another scope.
class Clazz
{
public:
void Fun1()
{
//Do something else...
}
};
class MyClazz; //this is a totally different thing.
MyClazz.Fun1(); //this does something else.
https://stackoverflow.com/questions/9075931
复制相似问题