c++学习笔记之封装篇(上)
2017-03-26 11:28
501 查看
c++学习笔记之封装篇(上)
发表于 2017-03-12 | 分类于 学习 , 程序员 , c/c++ | 暂无评论 | 阅读次数一、类对象
假设我们由Tv这个类,定义如下注意class结尾要加上分号12345678910 | class Tv(){ int width; int height; int volume; void changeVolume() { //changeVolume }}; |
1.实例化
从栈中实例化对象12345 | Tv tv;或者 Tv tv[20] //实例化对象数组 从栈中实例化系统自动回收内存 |
实例化一个对象后还需要判断是否成功申请到内存
12345678910111213 | Tv *p = new Tv(); Tv *q = new Tv[20]; //开辟一块对象内存 if(p==NULL){ cout<<"类实例化失败"<<endl;}//从堆中实例化数组对象,需要程序员回收delete p; delete[]q; p = NULL;q =NULL; |
访问数据
通过栈实例化的对象访问数据成员:12 | tv.volume = 5; tv.changeVolume(); |
12 | tv->volume = 5; tv->changeVolume(); |
二、string
可以很方便的定义一个字符串,而不再是使用麻烦的char[].使用方法:
12 | // 引入string头文件#include <string> |
初始化方法
注意:第4个初始化方法中的第二个参数只能是一个字符,不能是字符串。string初始化.png
常用操作
操作.png对于字符串相加操作,需要注意一点,不能直接使用两个字符串相加,中间必须得有字符串变量连接才行(下面例子中最后一个赋值语句是错误的),具体例子如下:
!.png
另外如果要将字符串和整数连在一起输出,则需要在整数前加上 << 进行处理,直接用 “+” 是无效的。
123 | string name;cin>>name;cout<<name<<name.size()<<endl; |
三、构造函数
构造函数必须与类同名,起到的作用与python中的 _ init > _() 函数类似,即对类进行数据初始化。构造函数在对象实例化时被自动调用,且只调用一次。
构造函数没有返回值,不需要return值。
构造函数可以重载。
1. 构造函数分为有参与无参
举个栗子:1234567891011121314151617181920 | class Student{ // 无参构造函数 Student() { m_iHeight = 180; m_iWeight = 70; } // 有参构造函数 Student(int weight, int height) { m_iWeight = weight; m_iHeight = height; } private: int m_iWeight; int m_iHeight;} |
2. 构造函数初始化列表
在初始化对象时,初始化列表是最先执行的,所以有的时候对于const变量我们也可以提前赋值。语法:类名():变量1(参数),变量2(参数){}用法:
我们都知道一个人的身份证信息一般来说是不能随意篡改的,所以我们会使用const 来修饰,但是因为const修饰后,变量则不能再赋值,但是因为每个人的身份证又不一样,我们不可能在使用const修饰的同时进行赋值,那怎么办呢?所以这里用到了初始化列表来达到这么一个效果,详见下面的代码示例:
123456789101112131415161718 | class Student{ // 正确示例 // 初始化列表 Student(string id):m_iId(id) { // 初始化成功 } // 编译会报错 // Student(string id) // { // m_iId = id; // } private: const string m_iId;} |
12345678910111213141516171819202122232425262728293031323334353637 | Coordinate *coorArr = new Coordinate[2]{{1,2},{3,4}};``` 具体示例```cpp#include <iostream>using namespace std;class Coordinate{ public: Coordinate(int x,int y):m_iX(x),m_iY(y) { cout<<m_iX<<","<<m_iY<<endl; } // 打印坐标的函数 void printInfo() { cout<<m_iX<<","<<m_iY<<endl; } private: int m_iX; int m_iY;};int main(void){ //定义对象数组 Coordinate *coorArr = new Coordinate[2]{{1,2},{3,4}}; //遍历数组,打印对象信息 for(int i = 0; i < 2; i++) { coorArr[i].printInfo(); } return 0;} |
3. 拷贝构造函数
不能重载格式:
类名(const 类名& 变量名)
关于拷贝构造函数更具体的解析参考:
C++拷贝构造函数详解
4.析构函数
与构造函数相反,当一个对象的生命周期结束时,C++会自动调用一个特殊的成员函数,即析构函数进行善后工作,对成员变量所占内存进行释放操作。格式:(不需要参数)
~类名(){}
1234567 | class Student{ // 构造函数,初始化列表 Student():m_iId(110){}; // 析构函数,c++可以自动生成 ~Student(){};} |
申请内存–>初始化列表–>构造函数–>参与运算–>析构函数–>释放内存
written by MARSGGBO[/b]
2017-3-11
[5]: http://wx4.sinaimg.cn/large/83e758c9ly1fdk2g7sbwej20nl0d2gnv.jpg “2.png
“坚持原创技术分享,您的支持将鼓励我继续创作!
相关文章推荐
- c++学习笔记(6.类的封装)
- VS2010 C++ 学习笔记(四) 1.数据的封装 2.类外定义 3.构造函数(无参,有参,重载,初始化列表,拷贝) 4.练习
- C++基础学习笔记----第八课(类的封装)
- 【C++】学习笔记草稿版系列8(封装)
- C++数据的封装和类体内定义成员函数的学习笔记
- c++学习笔记之封装篇(上)
- onvif学习笔记7:一个C++封装的onvif代码的阅读笔记
- C++学习笔记10——类和封装
- 嵌入式开发之C++基础学习笔记4--面向对象封装继承多态
- 慕课学习C++笔记02-封装(下)
- 【从C到C++学习笔记】类声明/公有私有保护成员/数据抽象和封装
- 学习笔记 C++ 封装(下)
- 学习笔记之深入浅出MFC 第8章 C++重要性质-----类封装
- C++学习笔记4——类的封装(2)
- C++学习笔记3——类的封装(1)
- 慕课学习C++笔记02-封装(上)
- C++学习笔记 _________________________面向对象部分 类 封装 - 01
- c++学习笔记之封装篇(上)
- c++学习笔记 2005-9
- C++ 学习笔记