C++面向对象

C++面向对象

源程序的编译与链接

ifndef

​ 目的:为了防止重复包含导致的编译错误

#ifndef xxx
#define xxx
函数声明
#endif

Makefile

​ 目的:多文件的编译链接

# 注释
# 冒号前为任务,冒号后为条件,任务步骤为新一行然后缩进
all: main.exe

main.exe: main.cpp student.cpp
	g++ -o main.exe main.cpp student.cpp
	
clean:
	del *.obj *.exe

基础语法

auto变量

​ 由编译器根据上下文自动确定变量的类型

new/delete

​ 指针变量所指内存可以通过new/delete运算符在程序运行时动态生成和删除

左值引用

​ 类型名 & 引用名 变量名

​ 给变量名取一个新名字,变量必须是定义好的,可以是结构变量

右值引用

​ 类型名 && 引用名 表达式

​ 给临时变量取名,为了减少临时变量拷贝的开销

decltype

​ 由变量推出类型

for(😃

​ 冒号前为用于迭代的变量,后为将被迭代的范围

函数重载

​ 必须保证至少有一个函数参数的类型有区别。

函数参数的缺省值

​ 必须从后面往前面设置缺省值

函数类型追踪

int func();
auto func() -> int;

// 成员函数两种定义方式
class Matrix {
    public:
    	void fill(char dir) {
         	...;
		}
}; //在类外定义成员函数

void Matrix::fill(char dir) {
    ...;
} //在类外定义成员函数

this指针:指向当前对象的指针变量

类成员的访问权限:public;private(缺省属性)

友元:使用friend关键字,允许某些函数访问对象的私有成员

构造函数

​ 没有返回值,函数名与类名相同,可以重载

析构函数

​ 名称是"~类名",没有返回值,没有函数参数,用于释放对象占用的资源或其他后处理

拷贝构造函数

​ 在已有对象基础上生成新对象

赋值运算符重载

ClassName& operator= (const ClassName& right) {
	if (this != &right) {
        // 将right对象的内容复制
	}
	return *this;
}

流运算符重载

istream& operator>> (istream& in, Test& dst);

ostream& operator<< (ostream& out, const Test& src);

函数运算符重载

ReTurnType operator (Parameters) {
	...
}

下标运算符重载

ReTurnType operator [](Parameters) {
	...
}

重载前缀++/–和后缀++/–

// 前缀
ReturnType operator ++();
ReturnType operator --();

// 后缀
ReturnType operator ++(int dummy);
ReturnType operator --(int dummy);

静态成员

​ 使用关键字static修饰,某个类的所有对象共享

常量成员

​ 使用关键字const修饰,只能在构造函数的初始化列表中被修饰

default

​ 默认函数定义或声明加上=default,编译器会自动生成

继承

​ 常见的继承方式:

​ private(缺省方式):class Derived:Base{…};基类public对象,派生类对象无法引用

​ public:class Derived:public Base{…};基类public对象,派生类对象可以引用

​ 继承基类的构造函数:using Base::Base

​ 函数重写(override):函数名函数参数一样,会把其他重载函数屏蔽,恢复需要使用using 基类名::函数名

虚函数

​ 在返回值前加virtual关键字,编译器根据引用变量的实际类型决定调用基类或派生类重写的函数。

​ 使用final关键字修饰的虚函数,派生类不可对它进行重写

​ 使用=0修饰的为纯虚函数,用来定义接口

自定义类型转换

// 方法1 在源类中定义目标类型转换运算符
class Src {
    operator Dst() const {
		return Dst();
    }
};

// 方法2 在目标类中定义源类对象作参数的构造函数
class Dst {
    Dst(const Src& s) {
        
    }
}

禁止自动类型转换

​ 使用explicit关键字

​ 使用=delete修饰

强制类型转换

​ dynamic_cast<Dst_Type>(Src_var)

​ Src_var必须是引用或指针类型,Dst_Type含有虚函数

​ static_cast<Dst_Type>(Src_var)

​ 基类对象无法转成派生类对象,非继承的必须提供转换途径

函数模板

template <typename T> 

类模板

template <typename T,unsigned size> class array {
	T elems[size];
    ...
}

函数特化

template<> char* sum(char* a, char* b) {};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值