首页 / C++ / C++入门——类与对象
C++入门——类与对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++入门——类与对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2742字,纯文字阅读大概需要4分钟。
内容图文
![C++入门——类与对象](/upload/InfoBanner/zyjiaocheng/642/cfb26c333e244f97962b0f10b5baa876.jpg)
C语言中, 结构体就只是结构体, 在C++中, 结构体内不再是结构体, 它代表的是一个类, 它不仅可以定义变量, 也可以定义函数
- 类的定义
声明一个类, 需要使用class关键字或struct关键字修饰类名, 如:
class className{
// 类体:由成员函数和成员变量组成
};
用class声明和struct声明的区别在于成员的默认访问权限不同, class的默认访问权限是private, struct的默认访问权限是public
- - 类的两种定义方式
- 声明和定义全部放在类体中.
需要注意: 成员函数如果在类中定义, 编译器可能会将其当成内联函数处理 - 声明放在.h文件中, 类的定义放在.cpp文件中.
- 类的访问限定符及封装
访问限定符:
- public修饰的成员在类外可以直接被访问
- protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
- 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
注: 访问限定符只在编译时有用, 当数据映射到内存后, 没有任何访问限定符上的区别
封装: 通过访问权限选择性的将其接口提供给外部的用户使用.
作用:
- 保护数据
- 降低耦合
- 降低使用成本
- 类的实例化
用类类型创建对象的过程, 称为类的实例化
- 为什么类需要实例化?
类本身是不占用内存的, 它就相当于一个模子, 而类的实例化就是使用一些资源按着这个模子做出一个实际存在的类出来 - 实例化的类对象需要占用多大的内存?
一个类中不仅可以定义变量, 也可以定义函数, 而不同的类对象之间肯定是不能共用一份数据的, 但是却可以共用这些数据的处理方式, 也就是函数.
因此类的大小仅取决于成员变量的大小, 计算使用内存对齐的方式.
需要注意的是, 类的静态成员变量是被类的所有对象所共享的, 不算入类对象的大小当中 - 类是怎样实现函数被各个对象所共享的?
这就涉及到类的另一个特性了——this指针
- this指针
C++编译器给每个“成员函数“增加了一个隐藏的指针参数, 让该指针指向当前对象(函数运行时调用该函数的对象), 在函数体中所有成员变量的操作, 都是通过该指针去访问. 只不过所有的操作对用户是透明的, 即用户不需要来传递, 编译器自动完成.
this指针的类型:类类型* const
- this指针存在哪里?
this指针存在一般ECX寄存器中(参数个数确定), 通过ECX传递给被调函数; 如果参数个数不确定, this指针所在的参数被压栈后压入堆栈. - this指针可以为空吗?
看情况.比如下面这段代码:
首先定义了一个指向A 类型对象的空指针, 再通过这个指针访问A的成员函数f1,f2.class A { public: void f1() { cout << "i am f1" << endl; } void f2() { cout << "i am f2" << endl; cout << a << endl; } private: int a; }; int main() { A* a = nullptr; a->f1(); a->f2(); return 0; }
访问f1的时候没有对this指针进行解引用, 程序不会报错; 而在访问f2的时候需要通过this指针访问这个对象的成员, 因此程序在打印"i am f2"之后报错.
- const成员
const成员函数是使用const修饰的类成员函数, 它实际上是修饰该成员函数隐含的this指针, 因此, const成员函数不能修改对象的内容
定义:
函数返回值类型 函数名()const{
//函数体
}
根据const成员函数的特性, 在使用时也需要注意:
- const对象不能调用非const成员函数(const对象的内容不能被修改)
- 非const对象可以调用const成员函数(你不想修改我也管不着)
总结: const不能调用非const
多喝苦瓜身体好 发布了37 篇原创文章 · 获赞 3 · 访问量 1315 私信 关注内容总结
以上是互联网集市为您收集整理的C++入门——类与对象全部内容,希望文章能够帮你解决C++入门——类与对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。