c++变量、函数、类、对象的声明和定义

借鉴相关文章:

[C语言]变量的声明和定义有什么区别 - Cookies_L - 博客园 (cnblogs.com)

(20条消息) C语言中变量的声明和定义_史凯凯的编程技术博客-CSDN博客_变量声明

C++函数声明和定义深度解析 - fenghuan - 博客园 (cnblogs.com)

 一、变量的定义与申明

为变量分配地址的和存储空间的称为定义,不分配地址的称为申明

变量定义:用于为变量分配存储空间,还可为变量指定初始值,程序中,变量有且仅有一个定义

变量声明:用于向程序表明变量的类型和名字

1、extern通知编译器变量在其他地方被定义

extern告诉编译器变量在其他地方定义了

extern int Num;        //声明,不是定义

2、带有初始化式的声明必定是定义 

如果声明有初始化式,就被当作定义,即使前面加了extern。只有当extern声明位于函数外部时,才可以被初始化

extern double pi=3.14; //声明,也是定义,初始化
int Num = 10;          //声明,也是定义,初始化

 3、除非有extern关键字,否则都是变量的定义

int Num;               //声明,也是定义,未初始化

二、函数的定义与声明

形象一点:声明就是让编译器知道有这么一个家伙,但需要稍后再具体介绍(定义)

double CalculateRound(double d1,int d2);  //声明

double CalculateRound(double d1,int d2)//定义
{
    double a ;
    a = d1*d2*d2;
    return a;
}

int main()
{
    double Pi = 3.14;
    int d = 2;
    double add = CalculateRound(pi,d);//调用
    printf("%f\n",add);
    return 0 
}

三、类的定义与声明

类可以抽象的按照结构体进行理解,类本身有申明,也有定义,类的成员函数/成员变量有声明和定义可以按照变量/函数的声明和定义理解

class B; //类B的声明

class A{
//....................
B * ptr_B;
};

class B{  //类B的定义
//....................
};

类(class)就是对象的类型。实际上,类也是一种数据类型,它包含属性和行为(函数)。

类定义时,关于内存是否分配存疑,查阅相关资料后:

1.对于一般的类(非静态)来说,在定义类但还未创建对象的时候,类的所有成员(包括变量和函数)2.都占用着 内存 空间(准确地说占用着指令代码区),但不占用堆栈空间 

2.而创建对象的时候,会根据对象的类型占用堆栈的空间(用传统模式创建对象会占用栈空间,用引用+new模式创建对象会占用堆空间,同时引用会保存在栈里) 

3.对于静态(static)类来说,静态类是不能实例化创建对象的,所有的成员都是静态成员,也需要占用内存空间,但不在堆栈里,而是在内存的静态/全局区(这个区域用于存放所有的全局成员和静态成员)。

四、对象的定义与声明

可以将对象看做变量,参考变量理解类的定义与声明,(在查阅了很多资料后,发现很多资料对于对象的定义与声明没有明确划分,部分资料将创建对象A  a(1);理解为声明对象,与变量的声明有所不同,个人感觉有些模糊不清,虽然没有太影响使用但是很让人难受,所以询问了一下前辈,总结如上,或许书籍上有详细的说明分析)

类和对象的关系:

类与对象的关系就如模具和铸件的关系,类的实力化的结果就是对象,而对对象的抽象就是类,类描述了一组有相同特性(属性)和相同行为的对象。

创建对象的三种形式(对象的定义)

在进程虚拟地址空间中的栈中分配内存,栈中内存的分配和释放是由系统管理

A a(1);      //栈中分配   隐式调用
A b = A(1);  //栈中分配   显示调用

堆中分配内存,堆中内存的分配和释放必须由程序员手动释放

A* c = new A(1);    //堆中分配   实例化
delete c;           //必须在程序中释放指针

总结这些后,想到extern是不是也可以用来声明函数、类和对象,然后查阅资料,总结后:

答案是可以的。

该篇文章是自己参考的网络上的资料和相关的博客进行的归纳总结,很难保证自己归纳的东西一定是完全正确的,有什么问题欢迎大家指出,相互学习。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,可以使用枚举(enum)来定义一组具有相同型的常量。枚举变量可以通过定义一个枚举型并声明一个变量来创建。例如,引用中提到的C++代码中的枚举和字符串转换工具,在C语言中可以通过定义一个枚举型,然后使用该枚举型来声明变量实现相同的功能。 在C语言中,的概念并不存在。C语言是一种过程式编程语言,没有对象的概念。引用中提到的对象的存储方式和引用中的定义对象实例化都是C++的语法。 所以,在C语言中,无法直接使用对象的概念,也无法进行对象的存储方式和大小的计算。如果需要实现似的功能,可以使用结构体来定义一个数据型,然后通过结构体变量来表示对象。但是,结构体无法封装成员函数,只能通过函数来操作结构体变量。 总结起来,在C语言中,没有对象的概念,只能使用枚举和结构体来达到似的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++枚举与字符串转换工具](https://blog.csdn.net/zazzh007/article/details/114408928)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [< C++ >:C++ 对象(上)](https://blog.csdn.net/lcc11223/article/details/125204055)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【C++对象](https://blog.csdn.net/iluo12/article/details/124380824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值