展开全部
”一般来说在头文件中不能定义函数“ 这个貌似理解有错误。
定义函数都是放在头文件.h的,而实现是可以放头文件.h,也可以放在.cpp文件的。
一般来说是用函数声明,函数实现来表述的,而函数定义是等于函数声明的。
// Test.h
class Test
{
void print(); // 声明
};
// Test.cpp
void Test::print() // 实现
{
printf("Hello world!");
}
// Test2.h
class Test2
{
void print() // 声明并实现
{
printf("Hello world!");
}
};
主要实现是在头文件还是要cpp里面,一来说明,在头文件实现是希望编译器会将其编译成内联函数,以起到加快函数调用的作用。不过如果函数体有复杂实现将不会被编译成内联,当然在cpp里面实现的就肯定不是内联了。
你担心的问题是通过.h文件开头结尾的宏声明以排除已被包含,重复包含的
#ifndef __TEST__
#define __TEST__
// Test.h
class Test
{
void print(); // 声明
};
#endif /* defined(__TEST__) */
展开全部
头文件中不能定义函数?谁说的?
printf、scanf等函数,不都是在stdio.h头文件中定义的么?
你这问题太奇怪了
头文件完全可以定义函数,而且往往都用于定义函数
printf、scanf等函数,不都是在stdio.h头文件中定义的么?
你这问题太奇怪了
头文件完全可以定义函数,而且往往都用于定义函数
更多追问追答
追问
不行吧。如果在A.h中写了一个函数的定义,如果程序中的B.cpp和C.cpp都include了A.h,那么在程序中这个函数不是被定义了两次吗?除非保证在程序的所有文件中头文件只被包含了一次,那样就失去了写头文件的意义了。
不能在头文件中定义全局变量也是一个道理。
有一些例外,比如内联函数的定义就推荐写在头文件中。所以我在想对类的构造函数是否也有某些规定。
追答
不对,你完全不需要在B.cpp和C.cpp里都include"A.h"吧,只要在一个文件里包含就可以了。
如果头文件只是像C语言一样定义函数,你只需要在全局main函数所在的文件中包含进来就行,如果头文件是定义一个类(包括类中所有成员、及构造函数析构函数等),你就只需要在需要创建该类的实例的cpp文件中包含这个文件,其它的cpp文件不需要再包含了
其实,写头文件的意义,不在于一个程序中包含几次,而在于你可以让它在其它的程序集中包含进来,让这里面的函数或类可以反复使用。比如stdio.h的意义就在于:每个C语言的程序都可以包含,每个C语言程序都可以用,就是这个道理
另外,学C++的请注意,如果学了命名空间的用法,请果断摒弃头文件,改用引用命名空间的方式(就跟摒弃#define等预编译语句一样),C++已经不再推荐这种用来兼容C语言的方式了,推荐使用命名空间这种基于面向对象的方式
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询