C++构造函数的定义

一般来说在头文件中不能定义函数,为什么可以在头文件中定义类的构造函数?... 一般来说在头文件中不能定义函数,为什么可以在头文件中定义类的构造函数? 展开
 我来答
木有想到GK5ym
2015-07-27 · TA获得超过208个赞
知道小有建树答主
回答量:207
采纳率:90%
帮助的人:120万
展开全部

”一般来说在头文件中不能定义函数“ 这个貌似理解有错误。

定义函数都是放在头文件.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__) */
b_spike
推荐于2016-11-11 · TA获得超过3685个赞
知道大有可为答主
回答量:3724
采纳率:78%
帮助的人:1105万
展开全部
头文件中不能定义函数?谁说的?
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语言的方式了,推荐使用命名空间这种基于面向对象的方式
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式