C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成
在C语言中,结构体里只能定义变量,不能定义函数,但是在C++中结构体中能定义函数了,
在C++中结构体struct变成了类的关键字,但是在C++中都用class来定义类
class className
{
// 类体:由成员函数和成员变量组成
};// 一定要注意后面的分号
class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略
类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数
一、类的定义:
1.声明和定义都放在类中,如果声明和定义都放在类中,编译器会把他当成内联函数
class Person
{
public:
void showInfo()
{
cout << _name << " " << _age << endl;
}
string _name;
int _age;
};// 一定要注意后面的分号
int main() {
//实例化
Person s1;
s1._name="张三";
s1._age=18;
s1.showInfo();
}
2.类声明放在.h文件中,成员函数定义放在.cpp文件中
person.h
#include<iostream>
using namespace std;
class Person
{
public:
void showInfo();
string _name;
int _age;
};// 一定要注意后面的分号
person.cpp
#include"person.h"
void Person::showInfo() {
cout << _name << " " << _age << endl;
}
test.cpp
int main() {
Person s1; //实例化
s1._name="张三";
s1._age=18;
s1.showInfo();
}
类的大小计算为各成员变量的大小(和struct一样),成员函数不算空间,原因在于每次实例化时,只有成员变量会不一样,但是成员函数都是一样的,成员函数存放在一个共同的区域
二、类的访问限定符及封装
2.1 概念
在C++中,成员变量或者成员函数可以用private,public和protectd来修饰成员的访问限制,可以更加安全,一般我们把成员变量定义为private属性,成员函数定义为public,proteced暂时不做介绍
【访问限定符说明】
- public修饰的成员在类外可以直接被访问
- protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
- 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
- 如果后面没有访问限定符,作用域就到 } 即类结束。
- class的默认访问权限为private,struct为public(因为struct要兼容C)
2.2 意义
将数据和操作数据的方法进行结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互,例如:在电脑中我们只使用usb等接口,但是内部的细节我们不需要掌握
三、this指针
1.this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参,所以对象中不存储this指针 2.this指针是“成员函数”第一个隐含的指针形参
void Person::showInfo() {
cout << this->_name << " " << this->_age << endl;
}
this指针意义在于:如果有形参的时候,为了让编译器去区分哪一个对应于哪一个,但是在实际使用过程中,我们并不需要把this写出来,编译器帮我们做了处理了