手撕C++初阶语法类和对象(1)

目录

更多精彩内容尽在主页!!!!!!

1.对面向对象过程的认识

2.类

2.1类的访问限定符和封装

2.2类的实例化

2.3如何计算类的大小

3.this指针

1.对面向对象过程的认识

C语言是个面向过程的语言,我们在解决问题时要思考,解决问题的步骤。而C++关注的是对象,将一件事划分成不同的对象,通过对象的交互来解决问题,而不关注过程。

例:洗衣服

C语言步骤:

C++步骤:

2.类

其实类和结构体是很像的只不过在C语言叫结构体,在C++叫

在C++中结构体和类中都可以定义变量还可以定义函数,但是C++更喜欢用类表示,类的关键字为class

class className
{
// 类体:由成员函数和成员变量组成
};  // 一定要注意后面的分号

注意:不建议在类中定义函数,在类中定义函数,很有可能会被当成内联函数处理

           建议像以下方法定义。

//放在.h文件中和
class Date
{
  public:
    //打印年月日的信息
    void showdata();

  public:
   int _year;
   int _month;
   int _day;
};
//放在.cpp文件中

void Data::showdata()
{
  cout<<_year<<" "<<_month<<" "<<_age<<endl;
}

2.1类的访问限定符和封装

一共有三个关键字,public,protect,private

说明:

1. public修饰的成员在类外可以直接被访问
2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4. 如果后面没有访问限定符,作用域就到 } 即类结束。
5. class的默认访问权限为private,struct为public(因为struct要兼容C)
类的作用域
类定义了一个新的作用域,类的成员都在作用域里。在类外定义成员的时候要使用::指明成员属于哪个类。
class Person
{
public:
 void PrintPersonInfo();
private:
 char _name[20];
 char _gender[3];
 int  _age;
};
// 这里需要指定PrintPersonInfo是属于Person这个类域
void Person::PrintPersonInfo()
{
 cout << _name << " "<< _gender << " " << _age << endl;

2.2类的实例化

类其实就是相当一个图纸,本身是没有空间的,需要定义出一个类并分配空间

一个类可以实例化多个不同的对象

class data
{
 public:
  int _year;
  int _month;
  int _day;
};

//int main()
//{
//data._year//这个是错误的 因为类没有空间无法访问
//  return 0;
//}
 
 int main()
{
 data d1; 
 d1._year;//正确示范
  return 0;
}

2.3如何计算类的大小

我们既可以在类里定义成员函数,又可以在类里面定义成员变量,那么类是如何计算大小的呢.

首先第一个问题在类里里面定义的成员函数,都不会放在类里,而是会放在公共代码段

成员变量的计算可以参考结构体的内存对齐的规则,如果类为空的情况下,类的大小是一个字节,占一个字节的目的就是为了表示我定义这个空类是存在的。

3.this指针

观察下面的代码,大家会不会有个问题,就是调用Init的时候,这个init怎么找到d1的成员变量的?

主要的原因是,init还有一个参数this只不过被编译器隐藏了,Init完整的参数应该是

Init(Data* this, int year, int month, int day),调用init的时候会自动把当前的对象的地址取出来,传到this指针中,然后通过this指针访问该类的成员变量。

注意:this指针不允许在声明的时候加上,语法规定,加上编译器就会报错,调用的时候也不用给this指针传值。


class Date
{
public:

void Init(int year, int month, int day)
{
	_year = year;
	_month = month;
	_day = day;	
}
private:
	int _year;   
	int _month;
	int _day;
};

int main()
{
	Date d1;
	d1.Init(2023, 7, 20);
	
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值