面向对象上7-9
7字符串类的实现(带指针)
拷贝构造
拷贝赋值
析构函数
new分配内存
拷贝构造和拷贝赋值有一个默认版本
如果数据带指针,需要写一个新的拷贝函数
否则默认版本只会对指针进行操作,例如b = a,只会将b的指针也指向a,而原本b指向的东西漂浮,这就叫内存泄露
改动a,b也随之改变,叫做浅拷贝
private:存储字符串的数据应该是一个指针
指针需要额外写的构造函数
拷贝构造String::String const String& str)
拷贝赋值String& String::operator(const String& str)
检测自我赋值
先把左边杀掉,再创造相同空间,最后复制
析构函数
delete[] m_data
8堆,栈与内存管理
操作符重载<<,与complex类似
栈stack和堆heap
栈,是存在于作用域{}的内存空间,由析构函数自动清理
堆,new生成,是操作系统提供的global内存空间,程序可动态分配获得区块,因此必须手动delete。
static objects,程序结束才死亡
...
面向对象上3-6
3构造函数
内联函数
函数在class内部定义就成为内联函数;或者在外部用inline关键字
内联函数会很快,很好,尽量使用
但最终是否内联,还是要看编译器,过于复杂的函数即使声明内联了,也不一定变成内联
访问级别
public:一般放函数
private:一般放数据
构造函数
函数名称和类名称相同
12complex() : re(r)
构造函数独特的初始方法,非常推荐使用
带指针的需要写析构函数
构造函数经常重载,函数可以同名,但不能让编译器混淆不知道用哪个
4参数传递与返回
构造函数放在private,就不能创建对象。但可以用Singleton这个方法
不改变数据内容的函数要加const,否则编译器可能报错
参数传递
尽量不要pass by value,用pass by reference,相当于只传指针4个字节
返回值传递
尽量也用by reference
conmplex& operator += (const complex&);
友元函数
朋友可以来使用private中的数据
相同class ...
面向对象上1-2
C++C++面向对象上1简介
class分类:
不带指针pointer members
带指针pointer members
单一class:基于对象
多个class:面向对象
class之间的关系:继承,复合,委托
分为语言和标准库两个部分学习
2头文件与类的声明
class是struct基础上多了一些特性,提供了更多关键字
一个程序包括:
头文件.h用双引号””
主程序.cpp
标准库.h用尖括号<>
头文件正规写法(防卫式声明)
12345678910111213#ifndef __XXX__ 如果不曾定义过XXX#define __XXX__ 那么把他定义出来前置声明类声明class complex{ ..}类定义complex::function...#endif
模板
应用场合:数据类型在定义的时候不定死,用的时候再指定数据类型
用法:略
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment