模板可用作结构、类或模板类的成员。
class DebugDelete{ public: //构造函数,用于初始化输出流 DebugDelete(std::ostream &s = std::cerr):os(s){} //T的类型由编译器推断 template <typename T> void operator()(T* p) const{ os<<"deleteing p"<<endl; delete p; } private: std::ostream &os; }; //代替delete操作 double* p = new double; DebugDelete d; d(p); //释放p 类模版-将模板用作参数模板可以包含类型参数(如typename T)和非类型参数(如int n)。模板还可以包含本身就是模板的参数,这种参数是模板新增的特性,用于实现STL。
//模板除了可以包括类型参数(class T)和非类型参数(int n)之外,还要台将模板作为参数包括进去 //tempalte<calss T> //template<template<class T>class T1> //这个T1类型有局限性,它要求我们在使用该模板时传递的参数必须是个模板类 //people<human>Jack; //其中的human是用a模板声明的模板类,而people则是用b模板声明的模板类, Jack是用people这个模板类定义的一个对像 #include <iostream> #include <string> using namespace std; template<class T> class human { public: human(){} T GetAge(){ return age;} T GetStr(){ return name;} void SetAge(T &a){ age = a;} void SetStr(T &b){ name = b;} private: T name; T age; }; template<template<class T>class T1> class people { public: people(){} int GetAge(){ return s1.GetAge(); } void SetAge(int &a){ return s1.SetAge(a); } string GetStr(){ return s2.GetStr();} void SetStr(string &s){ s2.SetStr(s); } private: T1<int> s1; T1<string> s2; }; int main() { people<human>Jack; int i=8; string str="hello"; Jack.SetAge(i); cout<<Jack.GetAge()<<endl; Jack.SetStr(str); cout<<Jack.GetStr()<<endl; return 0; } 8 hello 感悟笔记 2020年03月15日22:19:22要真正理解面向对象设计,学习C++不是一个好的方式。他太大太杂了。
类和对象的关系可以理解为鸡蛋和土鸡蛋的关系。
当你想做西红柿炒鸡蛋的时候,你脑子里只有鸡蛋的概念,这就是类,当真正做的时候,手里拿的是土鸡蛋,这就是被实例化的类--对象。
类的本意是实现概念抽象,其本质是自定义类型,代表了需要申请的内存空间。所以使用的时候需要先实例化类,这样做就是先找到一个内存地址,然后开辟了类大小的内存空间。没有实例化的类是没有起始地址的,也就是没有在内存中存在。
面向对象编程也是面向接口编程,接口作为模块间的通信方式。通信包括对象间通信和进程间通信,无论什么通信都要有接口。
功能逻辑分离,功能只实现功能,代理类实现业务和逻辑,调用功能模块,这样做的好处是可以复用功能模块,职责清晰。
面向对象的主要思想是:重用,抽象,面向接口。
与面向过程不同的是,面向对象注重的是数据组织形式,而不是功能的实现。
重用导致数据会以最小单元存在,然后以继承关系重新组织。
一些原始的无任何继承的数据,可以通过建立新的类包含他们,并让新的类继承同一个虚基类,这样这些最小单元数据就有了逻辑上的统一性。通过继承不同的虚基类,可以让这些最小单元实现不同的组织形式。
以上也是抽象的一部分功能,即在逻辑上将最小单元抽象统一。
面向接口也是抽象。面向对象一般会通过一个抽象的接口来传递所有子类,这就导致去了解某一个功能时看不懂他在干什么,所以要完全了解接口,恐怕要完全了解他传递了哪些子类。
有些看不懂的代码,多了很多参数,要么是作为传递一类数据的接口使用的,这就必然给其他一些子类带来了多余的参数;要么就是该类或函数是某人的调试中的类或函数。所以从这两方面理解是个突破口。
面向接口编程,功能逻辑分离!
2020年03月28日22:40:09语言的学习方法:
1.数据类型
数据型,字符串
2.容器
容器及其方法
3.特殊机制
每种语言都有其独特的内置机制。
4.库函数
语言只是一种工具,掌握库函数才能实现具体功能。
事件就是状态变更;
对标和参考,是快速学习的有效方式,
在面向对象编程中,能调用方法的只有对象.
2020年04月22日06:29:52编程语言学习思路
I/O
数值
字符串
集合/容器
关键字/特殊机制
标准库
多线程
进阶
2020年04月24日07:02:53