【Note】

0.感觉essential C++真的不错,至少很适合我这种看不下长篇大论的人= - =而且叙事顺序也很清晰,比起primer和primer plus的介绍顺序能更快给我一个对西佳佳大致的概念。

书真的是越精简越好.

1.类模版  

  对于函数内容几乎相同,只是形参类型不同的函数,可以定义一个函数模版(function template).但要事先知道可能会使用的形参类型,即template不能针对未知类型.

定义:

//define a compare template
// implement strcmp-like generic compare function
// returns 0 if the values are equal, 1 if v1 is larger, -1 if v1 is smaller

template <typename T>
int compare(const T &v1, const T &v2)//<>内是模板形参表,该表不可为空!
     {
         if (v1 < v2) return -1;
         if (v2 < v1) return 1;
         return 0;
     }

调用:

int main()
{
   //I suppose T is int.
   //now call the compare template
   cout<<compare(1,0)<<endl;

   //now T is string.
   //call again
   cout<<compare("cww","isme")<<endl;
   return 0;
}
声明inline模版:
template <typename T>
inline T compare(const T&, const T&){}

inline怎么看都不太熟悉(有三次了啊...)大概是不顺眼,暂时别考虑用.

2.泛型编程:

暂时skip.

貌似主要针对template.

3.实现一个class:

class cww
{
  public:
      ……
  private:
      ……
}

①member function必须在class主体内进行声明,但可不同时进行定义.

在class内定义的即自动视为inline函数,在其之外定义的,要在头文件中指定关键词inline.

如对于某Cww类中bool empty()和bool pop()函数,要在class Cww外定义它:

inline:

inline bool Cww::empty(){……}
bool Cww:pop(string &elem){……}

上述中,Cww::empty()是在告诉compiler,empty()是Cww class的一个member.

4.Constructors(构造)和Destructors(析构):

Constructors的函数名称必须与class相同,且不应返回型别,亦不需要返回值,可以重载.

举个栗子:

//define a class
//设定元素个数、起始位置、

class Triangular
{
  public:
  ……
  private:
    int _length;
    int _beg_pos;
    int _next;
}

//对Triangular进行重载构造:
class Triangular
{
//一组重载的构造函数:
  public:
    Triangular();
    Triangular(int len);
    Triangular(int len,int beg_pos);
//……
}

当调用这些重载函数时,编译器会根据获得的参数来确定被调用的函数.

*当代码为:

Triangular t=8;

意为获取一个参数而非是赋值操作.

以最简单的无参函数Triangular()为例,它的内容可以有两种情况:

//1st,它不接受任何参数
Triangular::Triangular()
{
  _length=1;
  _beg_pos=1;
  _next=0;
}

//2nd,它为每个参数提供默认值
class Triangular
{
//……
  public:
    Triangular(int len=1,int bp=1);
//……
}

Triangular::Triangular(int len,int bp)
{
  _length=len>0?len:1;
  _beg_pos=bp>0?bp:1;
  _next=_beg_pos-1;
}

Constructor还有第二种初始化方法,那就是member initialization list:

Triangular::Triangular(const Triangular &rhs)
  :_length(rhs._length),
   _beg_pos(rhs._beg_pos),
   _next(rhs._beg_pos-1)
{}//{}内就是空的.

初始值放在member后的()内.

现在暂不需考虑一二两种初始化方法的优先性.

接下来学习destructor:

Destructor用来释放在constructor中或对象生命周期中配置的资源.

名称规定:‘~‘加上class名称.如在去Qt中:

MainWindow::~MainWindow()
{

}

Destructor并非绝对必要.根据情况而定,比如Triangular就并没有什么好释放的.

事实上,C++最难的部分之一,就是了解何时需要定义destructor而何时不需要.

(既然这样也暂时没我的事了,不用为妙= - =)

ps:rhs=运算符右边的操作数,同理lhs=运算符左边的操作数.

5.Mutable(可变)和const:

如下,要保证获取的参数train在整个sum()中不被改变,以防sun()所调用的任何一个函数时更改了train的值,因此用到const.

int sum(const Triangular &train){
}

这个貌似是必须加的哦,否则会被compiler警告(报错/总之是不接受的).

mutable暂时skip.我想也用不着.

6.this指针

【明天继续=-=】

				
时间: 2024-11-05 03:28:47

【Note】的相关文章

【note】SSC配置工具Slave STack Code Tool操作重点8月8

SSC配置文件(* .escfg)和奴隶项目文件(* .esp). 每个SSC版本提供的配置文件,包括所有设置和信息 主要的用户界面元素 工具栏:文件,工具,工程,帮助 窗口:从站项目导航:冲突窗口. File –Saveas 只是保存了相应的esp文件 若要保存相关的src源文件,需要进行操作:Project-New Slave Files [note]SSC配置工具Slave STack Code Tool操作重点8月8

【note】缩写词

CoE CANopen EtherCAT应用程序概要文件CANopen?是一个注册商标的可以自动化汽车集团..纽伦堡.德国CiA402CANopen?驱动器配置文件中指定的IEC 61800-7-201;CANopen?和中央情报局?是可以的注册商标在自动化汽车集团..纽伦堡.德国. csp周期同步位置 csv周期同步速度直流分布式时钟在EtherCAT EoE以太网E SC EtherCAT从属控制器 GPO通用输出数控数字控制 PDI过程数据接口 PDO过程数据对象 PLC可编程序逻辑控制器

【note】EtherCAT Configurator 使用之主菜单介绍

EtherCAT配置器是一个工具,用于配置EtherCAT总线. 工具管理一个或多个EtherCAT主设备和连接到该主站的EtherCAT从站.配置的设备可以脱机或可以通过扫描EtherCAT现场总线. EtherCAT配置器只支持EtherCAT现场总线. 开始使用 select 'start' -> 'Programs' ->'EtherCAT Configurator' -> ' EtherCAT Configurator' 软件界面 1 action 菜单 Reload Devi

【note】EtherCAT的SSC配置工具的使用(Slave Stack Code Tool)

SSC配置工具允许根据用户特定需求创建新的从站文件 从站的文件列表: - C源代码文件 --源代码文档(可选) --设备描述(ESI)(可选) 支持的操作系统:WindowsXP,Vista,7(32位) 需要框架:.NET4.0 两个新文件扩展名注册:SSC配置文件(* .escfg)和奴隶项目文件(* .esp). 每个SSC版本提供的配置文件,包括所有设置和信息 主要的用户界面元素 工具栏:文件,工具,工程,帮助 窗口:从站项目导航:冲突窗口. 项目向导: 项目向导提供了一步一步的奴隶代码

【note】Slave STack Code Tool之各类参数配置

第四章 硬件访问 从站堆栈代码可执行在多个平台上和控制器架构.因此, 源代码包含多个定义来满足特定的硬件需求. 本章描述了硬件的具体配置和硬件访问的功能 使用通用的堆栈层 有可能用到的 SlaveInformation Define: VENDOR_NAME EtherCAT slave vendor name EtherCAT从站供应商名称 Define: DEVICE_NAME Name of the slave device (Object 0x1008) 定义:DEVICE_NAME 0

【note】stm32 keilMDK出现warning: function XX declared implicitly

warning: #223-D: function "CLR_TX_DATA" declared implicitly 解决方法. 以上面错误提示为例: 1  找到定义函数 CLR_TX_DATA() 的源文件 ,这里假设在 a.c  中: 2  在 a.h 中最后声明一下 CLR_TX_DATA(),即添加(假设此函数无返回值无参数) void  CLR_TX_DATA(void): 3  再次编译 刚才的 warning  即可消失. 参考自 KEIl编译STM32的时候,出现了一

【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示

申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 推荐 前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty4(Netty5已经被取消开发了:详见此文). 本文将演示的是一个基于Netty4的UDP服

【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战

概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty4(Netty5已经被取消开发了:详见此文). 本文中,服务端将分别用MINA2和Netty4进行实现,但在你实际的项目中服务端实现只需选其一就行了.本文中的Demo同时

【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战

前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同时用MINA2和Netty4分别实现服务端的目的,是因为很多人都在纠结到底是用MINA还是Netty来实现高并发的Java网络通信服务端,在此干脆两个都实现了,就看你怎么选择了,够吊吧. NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,M