随笔分类 - C++
这是一个初学者从入门到进阶的学习记录。
摘要:1.array myArray.hpp //定义和实现写在一起的时候,用hpp #include <iostream> using namespace std; template <class T, size_t _size> class MyArray { public: MyArray() {
阅读全文
摘要:1.可变参模板函数 //列表方式展开 template<class _Ty> void print(_Ty data) { cout << data << endl; } template<class ...Args> void printData(Args... args) { int array
阅读全文
摘要:1.函数模板 //普通与模板同时存在的时候,优先使用普通函数 int Max(int a, int b) { return a > b ? a : b; } template <typename _Ty> _Ty Max(_Ty a, _Ty b) { return a > b ? a : b; }
阅读全文
摘要:1.虚析构函数 class MM { public: virtual void print() { cout << "MM" << endl; } virtual ~MM() { cout << "~MM" << endl; } }; class Girl:public MM { public: v
阅读全文
摘要:1.虚函数 + 在类中用virtual 修饰的函数 叫做虚函数+ 没有虚构造函数,但是存在虚析构函数 虚函数对于类的类内存影响 + 没有数据成员类是占用1个字节,普通函数对于类的内存是毫无影响 + 所有虚函数都是用一个指针存储:虚函数指针 + 通过虚函数表的理解去访问虚函数 class MM { p
阅读全文
摘要:1.类的继承中的同名问题 1.1正常继承中的同名问题 基本上C++同名问题都是就近原则 如果想访问父类成员,用类名限定即可。 2.虚继承(菱形继承) A >int a; B C B、C继承自A,D多继承于B、C >B:a C:a //B,C要虚继承A D >D: a a class A { publ
阅读全文
摘要:1.继承的传递性 继承具有传递性:无论继承多少次,属性都存在 2.多继承 class A { public: A(string name1, string name2) :name1(name1), name2(name2) {} protected: string name1; string na
阅读全文
摘要:1.基本概念 继承: 父类 子类 ,子类没产生新的东西 派生:基类 派生类 继承A 产生B ,A B 2.继承的实质 父类的属性在子类中也存在一份,构造函数不能被继承 3.继承的权限问题 | | public | protected | private || | | | || public继承 |
阅读全文
摘要:1.**默认的赋值重载** class MM { public: MM() {} MM(string name, int age) :name(name), age(age) {} MM(const MM& obj) { this->name = obj.name; this->age = obj.
阅读全文
摘要:1.基本重载 + 友元函数的方式实现重载+ 类成员函数的方式实现重载 重载函数的基本语法: 重载函数的返回值类型 operator 要重载的运算符(参数){函数体;}; 参数个数: + 友元重载 重载函数的参数个数等于运算符的操作数+ 类成员函数重载,重载函数参数个数是等于运算符的操作数-1 cla
阅读全文
摘要:1.友元 friend关键字,友元赋予对象具有打破权限限定的一个功能,并不是能够直接访问类中数据 2.友元函数 在类中用friend修饰的函数 称之为友元 在友元函数中 的对象具有打破权限限定,以一个对象为参数或者在当前函数中定义的对象,友元函数不属于类,所以不受权限限定 + 普通函数是友元函数 c
阅读全文
摘要:1.单例模式(不考虑多线程) 构造函数私有化。 提供静态公有接口访问对象。 1.1懒汉式(在多线程下存在安全问题) 1.2饿汉式 //懒汉式 namespace lanHan { class MM { public: static MM* getMM() { if (lpMM == nullptr)
阅读全文
摘要:1.static成员 static成员特性: 它的调用可以不需要对象,它整个类共有的,(所有对象用的都是同一个),不是某一个对象单独属性。static 的成员虽然不需要对象就可以调用,但是依然是类的权限限定的 + static数据成员 + static 修饰的数据成员,就是静态数据成员 + 不能在类
阅读全文
摘要:1.const成员 + const数据成员 + 其他地方不能修改const 数据成员 + 初始化必须采用初始化参数列表的方式进行初始化 class MM { public: //const成员必须采用初始化参数列表 MM(string name,int age,int id):name(name),
阅读全文
摘要:1.拷贝构造 + 它是一个特殊的构造函数+ 参数是唯一的:对对象的引用+ 作用: 实现通过对象去构造对象 namespace myData { class Girl { public: //Girl() { cout << "默认构造" << endl; } Girl(string name) :n
阅读全文
摘要:1.构造函数 构造函数的特征 + 名字和类名相同+ 没有返回值+ 不写构造函数会存在一个默认的构造函数(无参),如果写了,默认的就不存在+ 构造函数不需要自己调用,创建对象的时候调用构造函数+ 构造函数的长相决定了对象模样(参数个数)+ 构造函数的作用: 一般来说就是为数据做初始化+ 可以被重载(参
阅读全文
摘要:1.类与对象小案例(封装按钮) #include <graphics.h> #include <iostream> #include <string> using namespace std; class Button { public: Button() = default; Button(int
阅读全文
摘要:1.类与对象基本概念 /* 类:对一系列事物的的共同属性或者行为的一种抽象 用class修饰的(结构体在C++中也可以当作类) 属性:事物的特征 -->数据成员 行为:具体的操作 -->成员函数 对象:类的具体化 */ //1.定义一个类 namespace myData { //用namespac
阅读全文
摘要:1.C++ string int main() { //1.string初始化方式 //构造空的 string str; cout << str.size() <<"\t"<< str.length() << endl; // 0 0 //构造方式初始化 string str1 ("ILoveYou
阅读全文
摘要:1.结构体基本区别 struct MM { char name[20]; int age; void print() //默认为内联函数 { cout << name << "\t" << age << endl; } }; int main() { //1.定义变量时省略关键字 struct MM
阅读全文
浙公网安备 33010602011771号