C++中的结构体与类

1. 结构体

1.C语言中,如果不使用typedef给结构体起别名,那么定义结构体变量的时候,必须使用 struct 结构体名 结构体变量名;而 C++ 中允许直接使用:  结构体名  结构体变量名; 来定义变量

2.C语言中,结构体中不允许封装函数,只能封装函数指针,而C++的结构体中允许定义函数。

2. 类

2.1 声明一个类

class 类名{ private: //后面是冒号,私有的成员变量(数据/属性)和成员函数(方法/行为)

protected: //受保护的成员变量(数据/属性)和成员函数(方法/行为)

public: //共有的成员变量(数据/属性)和成员函数(方法/行为) };别忘了写分号

2.2 封装

面向对象的三大特征(封装、继承、多态),如果有四,加一个抽象,我们对类的定义,就属于封装的范畴。

封装:将和一类事物相关的完事万物都封装成类,通过类对象去做事儿。

访问控制权限:

public: 修饰的成员 在类内、子类中、类外都可以直接访问;

protected: 修饰的成员 在类内和子类中可以访问 类外不能直接访问;

private: 修饰的成员 只能在类内访问 子类中和类外都不能直接访问。

类的成员函数中是可以访问类的成员变量的(public protected private 都可以访问),即使是通过函数传参传递过来的本类的对象的私有成员,也能访问。也就是说,访问控制是针对整个类而言的,并不是针对某个类对象(例如,s1,s2都可以通过函数访问类里的private)而言的。访问控制一旦出现,后面所有的成员都受该权限的控制,直到出现新的访问控制权限,或者类的定义结束,访问控制权限允许多处出现和使用,但是一般情况下,能都通过对成员的归类,一般一种权限只写一次。如果类中没有写访问控制权限,默认的所有成员都是被private控制的。

类外定义的时候,要加上类名以及作用域区间符::。

class Cuboid{

private:

int length;//长

int weight;//宽

int high;//高

int V;//体积

public:

#if 0

//类内定义的写法

Cuboid(int l, int w, int h){

cout<<"构造函数"<<endl;

length = l;

weight = w;

high = h;

}

#endif

//类内声明

Cuboid(int l, int w, int h);

};

//类外定义的写法

Cuboid::Cuboid(int l, int w, int h){

cout<<"构造函数"<<endl;

length = l; weight = w; high = h;

}

3. C++中类和结构体的区别

唯一的区别,就是默认的访问控制权限不同:

类中成员的默认的访问权限:private;

结构体中成员的默认的访问权限:public。

4. this指针

this指针是类中成员函数的一个隐藏的形参,哪个类对象来调用成员函数,this指针就指向谁。

this指针的类型: 类型 * const this;

this是C++中的一个关键字,也是一个const指针,它指向当前对象,通过它可以访问当前对象的所有成员;

(1)this可以访问类的所有成员,包括private、protected、public;

(2)this是const指针,它的值不能被修改的。

(3)this只能在成员函数内部使用,不能在其他地方使用。

(4)只有当对象被创建后this才有意义,因此不能在static成员函数中使用。

(6)友元函数没有this,要访问非static成员时,需要对象做参数;要访问static成员或全局变量时,则不需要对象做参数;

注意:

1.不能在成员函数的形参中使用this指针;

2.不能在构造函数的初始化表中使用this指针;

3.在成员函数的函数体中可以使用this指针。

一种必须使用this指针的场景:

成员函数的形参和成员变量重名时(也可以使用 构造函数 的初始化表解决):

class Test{

private:

int a;

int b;

public: void init(int a, int b){ //成员函数的形参和成员变量重名时 //在成员函数内部 不加修饰 默认使用的是形参 //a = a;//形参自己给自己赋值 //b = b;//形参自己给自己赋值 //这是可以使用this指针区分

this->a = a;

this->b = b;

cout<<"init: "<<a<<" "<<b<<endl;//10 20

} void show(){

cout<<"show: "<<a<<" "<<b<<endl;//10 20 }

};

另一种必须使用this指针的场景:

拷贝赋值函数需要返回自身的引用时,只能通过this指针访问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值