C++类和对象

1.类的定义

c语言是面向过程的语言,分析问题并把它拆分为几个过程,再通过函数调用实现,c++是面向对象的语言,分析问题并把它拆分成几个对象,再通过对象之间的交互实现

  • c语言结构体中只能定义变量,c++类中不仅可以定义变量也可以定义函数 
  • c++一般使用class定义类,c++兼容c语言,也可以使struct定义类

class的定义和struct类似,class为定义类的关键字,ClassName为类的名字,{}中间的是类体用于定义成员变量和成员函数(类方法),注意括号{}后面需要带分号

class ClassName

{

    //类体

};   //后面需要带分号

 1.类方法的两种定义方法

方法一:把类方法的声明和定义都放在类中

ps:类的声明和定义都放在类中,编译器可能将其当成内联函数

方法二:把类方法的声明放在类中,定义放在另一个文件中

一般情况下,更加推荐使用方法二来定义类方法

2. 成员变量命名规则

我们一般会在成员变量加个前缀或者后缀,用于区别形参和成员变量 

下面这段代码,成员方法的形参和成员变量的名字一样,究竟是谁赋值给谁?

class Date
{
public:
    void Init(int year, int month, int day)
    {
        year = year;
        month = month;//这里究竟是把谁赋值给谁
        day = day;
    }
private:
    int year;
    int month;
    int day;
};

显然上面的代码不够规范,我们应该这么写

 class Date
{
public:
    void Init(int year, int month, int day)
    {
        _year = year;
        _month = month;          
        _day = day;
    }
private:        //将所有成员变量加_
    int _year;
    int _month;
    int _day;
};

3.访问限定符

c++中访问限定符有3个:public(公有),protected(保护),private(私有)

  • public修饰的成员变量可以在类外直接访问
  • protected和private不能在类外直接访问(此处protected和private作用类似)
  • 访问权限从该访问限定符开始到下一个访问限定符或者'}'类结束
  • class的默认权限是private,struct的默认权限是public(因为c++兼容c语言,c语言可以在结构体外直接访问结构体成员)

2.类的实例化

  • 用类类型创建对象的过程,叫做类的实例化
  • 类就像一个房子的设计图,对象就像房子,需要通过类的实例化创建对象
  • 实例化的对象占用实际的物理空间,用于储存成员变量
1.类的大小   

可以计算出Date类的大小为12字节

  • c语言中结构体只能定义成员变量,如果在类不仅有成员变量还有类方法,如何计算类的大小?

成员函数不在对象中,对象大小只计算成员大小,所以类的大小还是12个字节

  •  空类比较特殊,编译器给了空类一个字节来标定这个类的对象,这一个字节不存储任何有效数据,只是用来标定定义的对象存在过

2.类对象的储存方式 

成员中只存放成员变量,成员函数被放在公共代码区域,所以计算类的大小的时候不计算成员函数

3.this指针 

Date类中有Init和Printf两个成员函数,成员函数中没有区别不同对象,那么函数是如何实现?

其实c++编译器给每个非静态成员变量函数都增加了一个隐形的指针参数,让这个指针指向当前对象,在函数体中所有的成员变量的操作,都是通过this指针找到成员变量,这个过程不需要用户来完成,编译器默默承受一切

如果将this指针显式的写出来是这样的: 

this指针的特性

  •  this指针的类型是*const,成员函数中不能给this赋值
  • this指针只能在成员函数中内部使用
  • this指针是成员函数的形参,当调用成员函数时,将对象地址传给this指针,所以对象中不存储this指针,this指针存在栈帧中
  • this指针时成员函数的第一个形参,一般由编译器通过ecx寄存器自动传递,不需要用户操作
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值