C++ programing language知识整理(2)

来源:互联网 发布:中国修正主义知乎 编辑:程序博客网 时间:2024/05/22 08:24
1.
  过程化编程,
  模块化编程,
  用户定制(抽象数据)类型,CLU C++
  面向对象
2. 用户定义新类型,继承,接口
2.1 int main (int argc,char *argv[])
argv是一个指向字符指针数组的指针。数组argv中的每个指针都指向一个字符串,这个字符串中包含了一个命令行参数。
#include<stdio.h>
main (int argc,char *argv[])
{
int i;1
printf("/n命令行中可执行文件名为:%s",argv[0]); //为程序名
printf("/n总共有%d个参数:",argc); //参数的个数
i=0;
while(argc>=1)
{
printf("%s ",argv[++i]); //为后面的 参数
argc--;}
}
3.流输入输出功能  标准输入输出:
cout是标准的输出流,操作符 "<<"是流输出符,被重载。算符和函数不能被重载
较C之优点:
  (1)定义新类
  (2)确保初始化和清除
  (3)类型继承
  (4)异类数据结构
类:支持数据隐藏、封装、抽象和继承
---------------------------------------------11/05/2008
4.模板
(1)template声明中的通用类型通常是使用关键字class来指定,也可以使用关键字typename
template <class Ttype> ret_type func_name(parameter list)
{
   //函数体
}
Ttype是一个占位符,它代表函数使用的数据类型。占位符的名字可以被用在函数的定义中。编译器在创建一个具体的函数时将用实际的数据类型来替换它。
-----------------
template <class X>
void swapargs(X &a,X &b)  //class可以换成typename
{
X temp;
temp=a;
a=b;
b=temp;
}
------------------
(2)通用函数也称为模板函数,当编译器创建某个特定版本时,这个函数被称为特例函数(specialization),这个过程被称为实例化模板函数。
(3)函数模板可以带有两个或者两个以上通用数据类型
-----------------
#include <iostream>
using namespace std;
template <class type1,class type2>
void myfunc(type1 x,type2 y)
{
cout<<x<<' '<<y<<'/n';
}
int main()
{
    myfunc(10,"hi");
    myfunc(2.34,10l);
    return 0;
}
---------------
(4)显式重载通用函数:对通用函数进行显式重载,将覆盖(或隐藏)通用函数相应的特例函数。
   显式重载的新语法:
//如显式重载1)中的通用函数
-----------------
template <> void swapargs<int>(int &a,int &b)  //class可以换成typename
{
int temp;
temp=a;
a=b;
b=temp;
        cout<<"inside swapargs int specialization./n";
}
------------------
(5)重载函数模板,参数不同于原来的函数模板。
(6)模板函数使用标准参数:
-----------------
template <class X>
void swapargs(X &a,int &b)  //class可以换成typename
{
X temp;
temp=a;
        cout<<temp<<' '<<b<<'/n';
}
-----------------
(7)通用类
template <class Ttype>class class-name{
   ...
};
Ttype是类型名字占位符,在实例化类的时候将使用指定的数据类型来替换。当需要使用多个通用数据类型,使用逗号分隔参数列。
使用下面的通用形式生成类的实例:
   class-name <type> ob;  //type是对象需要使用的数据类型
------------
template <class QType> class queue
{
QType q[100];
int sloc,rloc;
public:
queue(){sloc=rloc=0;}
void qput(QType i);
QType qget();
};
........
queue <int> a,b;    //声明了一种int队列对象
queue <double> x,y; //声明了一种double队列对象
------------
queue<char *> chrptrQ;//创建存储字符串指针的队列对象
-----------
struct addr{
char name[40];
char street[80];
char city[40];
char state[20];
char ziq[20];
};
queue<addr> obj;
 
原创粉丝点击