C++面向对象编程 (16)

模板可用作结构、类或模板类的成员。

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月22日20:45:59

面向对象的主要思想是:重用,抽象,面向接口。
与面向过程不同的是,面向对象注重的是数据组织形式,而不是功能的实现。

重用导致数据会以最小单元存在,然后以继承关系重新组织。
一些原始的无任何继承的数据,可以通过建立新的类包含他们,并让新的类继承同一个虚基类,这样这些最小单元数据就有了逻辑上的统一性。通过继承不同的虚基类,可以让这些最小单元实现不同的组织形式。

以上也是抽象的一部分功能,即在逻辑上将最小单元抽象统一。

面向接口也是抽象。面向对象一般会通过一个抽象的接口来传递所有子类,这就导致去了解某一个功能时看不懂他在干什么,所以要完全了解接口,恐怕要完全了解他传递了哪些子类。

有些看不懂的代码,多了很多参数,要么是作为传递一类数据的接口使用的,这就必然给其他一些子类带来了多余的参数;要么就是该类或函数是某人的调试中的类或函数。所以从这两方面理解是个突破口。

面向接口编程,功能逻辑分离!

2020年03月28日22:40:09

语言的学习方法:
1.数据类型
数据型,字符串
2.容器
容器及其方法
3.特殊机制
每种语言都有其独特的内置机制。
4.库函数
语言只是一种工具,掌握库函数才能实现具体功能。

2020年04月06日20:17:20

事件就是状态变更;
对标和参考,是快速学习的有效方式,

2020年04月16日19:29:56

在面向对象编程中,能调用方法的只有对象.

2020年04月22日06:29:52

编程语言学习思路

I/O

数值

字符串

集合/容器

关键字/特殊机制

标准库

多线程

进阶

2020年04月24日07:02:53

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjdxx.html