C++ —— 入门
来源:互联网 发布:ebrary电子书数据库 编辑:程序博客网 时间:2024/06/06 03:31
面向过程和面向对象
面向过程(SP):分析实现步骤,编写函数,用函数一个个实现。
面向对象(OOP)将数据结构和对数据结构处理的方法封装成一个个对象
new、delete
- new 运算符 可以用于创建堆空间
例如:
int *p; p=new int;
char *pStr=new char[50]; - delete运算符 可以用于释放堆空间
例如:
delete p;
delete [] pStr; - 和malloc/free的区别
1.new/delete会调用构造函数和析构函数分配内存,malloc/free不会
2.new自动分配内存,并且强制转换;malloc自定义分配大小,并且要自己转换
3.new/delete是运算符,malloc/free是函数
内联函数(inline)
//提高效率,小代码、频繁使用时使用内联函数inline int add1(int a, int b){ return a + b;}
类(class)
//在C++中用class定义的类中,其成员的默认存取权限是private;//在C++中用struct定义的结构体中,其成员的默认存取权限是public;class A{ void func(); //方法public: int a; //属性或数据成员};
构造函数
- 多个对象的开辟:
共用一份方法,开辟多份属性 - 作用:(允许函数重载,并且只能调用一次)初始化,构造函数要声明为public
- 分类
默认构造函数(没有参数或者一个默认参数的构造函数,如果没有构造函数,系统会自动生成默认构造函数)
普通构造函数(有两个或以上参数的构造函数)=重载构造函数
拷贝构造函数- 何时调用:
- 1.当用类的一个对象初始化该类的另一个对象时 (a=b)
- 2.如果函数的形参是类的对象 (func(a;))
- 3.如果函数的返回值是类的对象 (retrun a;)
- 4.是类的构造函数的传参(b(a))
/*********1.默认构造函数************/class CBase{public: //当对象被开辟,构造函数被调用,(自动调用) CBase() //构造函数(初始化) { cout << __LINE__ << " " << __func__ << endl; // a = 1; b = '.'; } void func() { } public: int a; char b;};int main(){ cout << __LINE__ << " " << __func__ << endl; //初始化 // CBase obj = {10, 'a'}; //赋值 // obj.a = 5; CBase a; CBase b; cout << a.a<< endl; cout << a.b << endl; return 0;}/*********2.拷贝构造函数******************/class CBase{public: //构造函数 CBase() { cout << __func__ << " " << __LINE__ << endl; } //拷贝构造函数(当obj1 = obj2时使用,当属性里面有指针要注意析构函数的重复调用) //1.默认拷贝构造(进行属性成员的copy) //2.自定义拷贝构造(属性成员可以修改) //拷贝构造函数的应用(1.cbase a; cbase b=a; 2.cbase a;cbase b(a); 3 func(obj); ///4.) CBase(const CBase &obj) //格式 { cout << __func__ << " " << __LINE__ << endl; } ~CBase() { cout << __func__ << " " << __LINE__ << endl; }public: int v;};//临时调用空间拷贝void func(CBase obj){}//不调用空间拷贝void func2(CBase &obj){}//func3内存被弹掉,所以不会拷贝//CBase func3()//{// CBase a;// return a;//}CBase func3(){ static CBase a; return a;}CBase &func4 { CBase b; return b;}int main(){ CBase obj; //拷贝1// CBase obj2 = obj; //拷贝2// CBase obj2(obj); //拷贝3// func(obj);//////////////////////////////////////////////////// //4不会拷贝// func2(obj); //拷贝5// CBase b = func3(); //拷贝6 CBase b = func3(); return 0;}
- 深拷贝和浅拷贝
- 深拷贝
- 浅拷贝
- 深拷贝
初始化列表
1.const
2.引用
3.父类构造函数需要形参
4.数据成员是另一个类的对象,这个类构造函数需要形参
命名空间
using namespace std;(使用标准std命名空间)namespace A //命名空间{}
this指针
A(int v) //构造函数{ this->v = v; //this->v是类的属性}
const和静态成员
非静态成员或者方法依赖对象才可以访问
class A{public: int a; }Cbase obj;obj.a = 1; //a是非静态成员,依赖对象obj//不可以A::a = 1;
类的静态成员(数据成员和方法成员(函数))不允许调用非静态成员
非静态成员可以调用静态成员
———因为非静态成员依赖对象,有开辟空间
所以在外部,非静态成员不依赖对象可以直接调用
const成员不能调用不允许调用非const成员
非const成员可以调用const成员
——–因为const不能修改
继承
- 多重继承(继承多个类)
- 构造和析构函数不参与继承
- 三种继承方式
public (参与继承,都可以用) –(基类是什么属性,子类就是什么属性)
protected (参与继承,子类基类可用,外部不可以使用) – (基类是public,子类变为protected,其他不变)
private(不参与继承,子类和外部都不可使用) – (不管是什么,全部变为private)
虚函数、虚继承
- 虚继承作用:解决多继承二义性,继承者共用一份数据
重载、重定义(隐藏)、多态(覆盖)
- 重载(同一类中,函数名一样,参数不一样)
- 重定义(1.不同类,函数名一样,参数不一样;或者2.不同类,函数名一样,参数一样,没有virtual)(隐藏掉子类的成员)
- 多态(不同类,函数名一样,参数一样,子类继承父类,基类函数是虚函数)(覆盖父类) —
实现多态,还需要基类的指针指向子类
CBase cobj;
SBub sobj;
CBase *pc = &sobj;
0 0
- 学习C++——入门
- C语言编程入门——HelloWorld!
- C语言编程入门——链表
- c语言入门——printf函数
- 【c#】——入门初观
- Linux C——shell基础入门
- C语言——指针入门
- C Sharp入门——值类型
- Linux —— C语言编程入门
- C语言入门——时间换算
- C语言入门——信号报告
- C语言入门——奇偶个数
- C语言入门——数字特征值
- C++——类的入门
- c语言—指针(入门1)
- c语言入门—数字倒序
- C语言入门(1)——C语言概述
- C语言入门——C语言学习日志1
- Sublime Text 2 实用快捷键[Mac OS X]
- java中servlet过滤器Filter学习(看网上资料 算是自己copy理解一遍吧)
- 软件测试基础知识一
- Android动画的分类和简单的使用方法
- iOS-App裁剪头像-Quartz2D应用
- C++ —— 入门
- 909422229__面向对象
- 前端开发PS快捷键
- Linux内核pr_debug的应用及log级别控制原理简析
- C#中如何获取鼠标的位置坐标
- 套后台模板HTML+整套Easyui皮肤组件-后台管理系统模板
- POJ2965 BFS(自己写队列)+状态压缩 OR 偶数格子的棋盘规律
- Python的shelve模块小问题
- Capturing Video on iOS iOS拍摄视频的方法总结