C 模板定义
c++选择题题集

C++选择题集1、下列的各类函数中,不就是类的成员函数。
( C )A)构造函数 B)析构函数 C)友元函数 D)拷贝初始化构造函数2、作用域运算符“::”的功能就是:( B )A)标识作用域的级别的 B)指出作用域的范围的C)给定作用域的大小的 D)标识成员就是属于哪个类的3、下列说明中const char *ptr;其中ptr应该就是:( C )A)指向字符常量的指针 B)指向字符的常量指针C)指向字符串常量的指针 D)指向字符串的常量指针4、已知:print()函数就是一个类的常成员函数,它无返回值,下列表示中,就是正确的。
( A )A)void print()const; B)const void print();C)void const print(): D)void print(const);5、在类定义的外部,可以被访问的成员有( C )A)所有类成员 B)private的类成员C)public的类成员 D)public或private的类成员6、要求打开文件"d:\",可写入数据,正确的语句就是:( B )ifstream infile("d:\", ios::in);ifstream infile("d:\\", ios::in);ofstream infile("d:\", ios::out);fstream infile("d:\\", ios::in|ios::out);7、关于类与对象不正确的说法就是:( C )A)类就是一种类型,它封装了数据与操作 B)对象就是类的实例C)一个类的对象只有一个 D)一个对象必属于某个类8、在C++中,类与类之间的继承关系具有( C )A)自反性 B)对称性 C)传递性 D)反对称性9.结构化程序设计所规定的三种基本控制结构就是:( C )A)输入、处理、输出 B)树形、网形、环形C)顺序、选择、循环 D)主程序、子程序、函数10、C++语言就是从早期的C语言逐渐发展演变而来的、与C语言相比,它在求解问题方法上进行的最大改进就是:( B )A)面向过程 B)面向对象 C)安全性 D)复用性11、在C++中实现封装就是借助于( B )A)枚举B) 类C) 数组D)函数12、C++语言就是从早期的C语言逐渐发展演变而来的与C语言相比,它在求解问题方法上进行的最大改进就是:( B )A)面向过程B)面向对象C)安全性D)复用性13、在C++中用( D )能够实现将参数值带回。
c++类模板template中的typename使用方法-超级棒

c++类模板template中的typename使⽤⽅法-超级棒转载:https:///vanturman/article/details/80269081近⽇,看到这样⼀⾏代码:typedef typename __type_traits<T>::has_trivial_destructor trivial_destructor;看起来它应该是定义⼀个类型别名,但是typedef不应该是像这样使⽤么,typedef+原类型名+新类型名:typedef char* PCHAR;可为何此处多了⼀个typename?另外__type_traits⼜是什么?看起来有些眼熟,想起之前在Effective C++上曾经看过traits这⼀技术的介绍,和这⾥的__type_traits有点像。
只是⼀直未曾遇到需要traits的时候,所以当时并未仔细研究。
然⽽STL中⼤量的充斥着的traits,⼀查才发现原来它是⼀种⾮常⾼级的技术,在更现的⾼级语⾔中已经很普遍。
因此这次花了些时间去学习它,接下来还有会有另⼀篇⽂章来详细介绍C++的traits技术。
在这⾥,我们暂时忘记它,仅将它当成⼀个普通的类,先来探讨⼀下这个多出来的typename是怎么回事?typename的常见⽤法对于typename这个关键字,如果你熟悉C++的模板,⼀定会知道它有这样⼀种最常见的⽤法(代码摘⾃C++ Primer)// implement strcmp-like generic compare function// returns 0 if the values are equal, 1 if v1 is larger, -1 if v1 is smallertemplate <typename T>int compare(const T &v1, const T &v2){if (v1 < v2) return -1;if (v2 < v1) return1;return0;}也许你会想到上⾯这段代码中的typename换成class也⼀样可以,不错!那么这⾥便有了疑问,这两种⽅式有区别么?查看C++ Primer之后,发现两者完全⼀样。
nc65打印模板自定义项设置

nc65打印模板⾃定义项设置
打印模板⾃定义变量设置
问题:打印模板中有些有些字段直接拖⼊打印模板中,⽆法使⽤,(类似⾃定义1的使⽤部门),直接拖⼊,打印的时候会直接先是“⾃定义1”,不显⽰具体的名称,这是需要⾃定义变量设置
以采购发票打印模板添加⾃定义1使⽤部门为例:
⾃定义变量
getcolvalue(bd_defdoc,name,pk_defdoc,invoicebody.vbdef1)
getcolvalue:getColValue(tablename,fieldname,pkfield,pkvalue)根据主键从数据库查询特定字段的值,其功能类似SQL语句:select fieldname from tablename where pkfield = pkvalue 从这条SQL语句可以看出各个参数的含义.
bd_defdoc:⾃定义档案
name :档案的名称
pk_defdoc 档案PK值
invoicebody.vbdef1:对应采购发票表体的⾃定义项⽬1
最后这个字段invoicebody.vbdef1 怎么确定
打开这个单据的单据模板,
点击修改,打开这个单据模板
页标签编码.项⽬编码就是打印模板中该字段的值。
课后答案——C++语言程序设计教程(第二版)

1.1习题1解答1.(1)机器语言是计算机直接理解执行的语言,由一系列(二进制)指令组成,其助记符构成了汇编语言;接近人的自然语言习惯的程序设计语言为高级语言。
(2)结构化程序设计方法主要内容有:自顶向下,逐步求精;面向对象方法将现实世界中的客观事物描述成具有属性和行为的对象,抽象出共同属性和行为,形成类。
(3)C++程序开发通常要经过5个阶段,包括:编辑,编译,连接,运行,调试。
首先是编辑阶段,任务是编辑源程序,C++源程序文件通常带有.c p p扩展名。
接着,使用编译器对源程序进行编译,将源程序翻译为机器语言代码(目标代码),过程分为词法分析、语法分析、代码生成3个步骤。
在此之前,预编译器会自动执行源程序中的预处理指令,完成将其他源程序文件包括到要编译的文件中,以及执行各种文字替换等。
连接器的功能就是将目标代码同缺失函数的代码连接起来,将这个“漏洞”补上,生成可执行文件。
程序运行时,可执行文件由操作系统装入内存,然后CPU从内存中取出程序执行。
若程序运行进程中出现了错误,还在需要对程序进行调试。
(4)对象与对象之间通过消息进行相互通信。
(5)类是具有相同属性和行为的一组对象的抽象;任何一个对象都是某个类的一个实例。
(6)多态性是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。
(7)面向对象的软件开发过程主要包括面向对象的方法分析、面向对象的设计、面向对象的编程、面向对象的测试和面向对象的维护。
(8)泛型程序设计是指在程序设计时,将数据类型参数化,编写具有通用性和可重用的程序。
(9)#include<iostream>是一条预处理指令(语句),在编译(或预处理)时由编译器(或预编译器)执行,其功能是将iostream文件包含(复制)到指令处。
(10)C++中使用cin作为标准输入流对象,通常代表键盘,与提取操作符>>连用;使用cout作为标准输出流对象,通常代表显示设备,与<<连用。
c语言if语句格式模板

C 语言中的if 语句用于执行条件性的代码块,根据条件表达式的结果来确定是否执行特定的代码。
以下是C 语言中if 语句的基本格式模板:if (condition) {// 如果条件为真,执行这里的代码块} else {// 如果条件为假,执行这里的代码块(可选)}模板中的关键元素包括:if:关键字,标志着条件的开始。
condition:条件表达式,它会被求值为真或假。
如果条件为真,if 语句中的代码块将执行。
{}:花括号用于定义代码块的起始和结束。
else:可选的关键字,如果if 语句中的条件为假,则执行else 后的代码块。
// 注释:这里可以添加注释,用于解释代码的目的或逻辑。
请注意以下几点:else 部分是可选的,您可以根据需要选择是否在条件为假时执行某些代码。
如果条件表达式的结果为真,那么if 语句中的代码块将被执行。
如果条件表达式的结果为假且存在else 部分,那么else 中的代码块将被执行。
如果需要在条件为假时执行多个语句,可以将它们放在花括号{} 中,以构成一个代码块。
在条件表达式中,通常使用比较运算符(如==、!=、<、>、<=、>=)来进行比较,并使用逻辑运算符(如&&、||、!)来组合多个条件。
以下是一个示例,演示了if 语句的使用:#include <stdio.h>int main() {int number = 10;if (number > 0) {printf("Number is positive.\n");} else {printf("Number is non-positive.\n");}return 0;}上述示例中,根据number 的值,if 语句决定输出"Number is positive." 或"Number is non-positive."。
国家二级C++机试(运算符重载、模板和C++流)模拟试卷6

国家二级C++机试(运算符重载、模板和C++流)模拟试卷6(总分:58.00,做题时间:90分钟)一、选择题(总题数:29,分数:58.00)1.若在表达式y/x中,''/''是作为成员函数重载的运算符,则该表达式还可以表示为( )。
(分数:2.00)A.x.operator/(y)B.operator/(x,y)C.y.operator/(x) √D.operator/(y,x)解析:解析:运算符函数的函数名是由运算符前加关键字operator构成的。
所以当“/”作为运算符重载后,其格式为operator/。
所以其作为成员函数调用时的格式为y.operator/(x)。
2.有类定义如下: class Type{ public: Type(int i=0); Type operator-(int); friend Type operator+(Type,Type); private: int val; };若有对象定义Type c1;则下列语句序列中,错误的是( )。
(分数:2.00)A.Type(3)+c1;B.e1+Type(3);C.3-c1:√D.c1-3;解析:解析:由于在类Type中对“-”进行了重载,所以根据“-”重载的形式定义,c1-3是正确的,而3-c1是错误的表达式。
3.若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。
(分数:2.00)A.Data+(Data);B.Data operator+{Data};√C.Data+operator{Data};D.operator+(Data,Data);解析:解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。
运算符函数的函数名是由运算符前加关键字operator构成的。
4.若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。
C++题目11-12

HZAU-专业C++作业11-12判断题1. 友元关系是单向的,不可交换的。
(2分)2. 只有成员函数才能传递this指针,而友元函数不能传递this指针(2分)3. 友元函数是成员函数,它可以访问类中私有成员。
(2分)4. 在成员函数中访问对象的数据成员时,可以直接用数据成员名,而在友员函数中访问对象的数据成员时,必须指明是哪个对象的数据成员。
(2分)5. 友元是可以继承的。
(2分)6. 常成员函数只能用来引用数据成员的值,而不允许改变数据成员的值。
(2分)7. C++语言允许使用友元,但是友元会破环封装性。
(2分)8. 必须在类定义体外对静态数据成员进行初始化。
(2分)9. 能访问一个类CMyClass中的private成员的可以是类CMyClass 的成员函数,友元函数和友元类中的函数。
(2分)10. 类的友元函数是指可以访问本类私有成员的其他类的成员函数。
(2分)11. 类中的静态成员数据为该类的所有对象所共享,并且,在该类对象被撤销时,静态成员并没有撤销。
(2分)12. 如果在一个类的对象之间要进行数据交换,可以使用该类的静态数据成员来完成。
(2分)13. 如果一个类的所有对象都共享某一个变量,则应当将该变量定义为该类的私有成员。
(2分)1.如果类A被说明成类B的友元,则()。
(2分)A. 类A的成员即类B的成员B. 类B的成员即类A的成员C. 类A的成员函数不得访问类B的成员D. 类B不一定是类A的友元2.友元的作用()。
(2分)A. 提高程序的运用效率B. 加强类的封装性C. 实现数据的隐藏性D. 增加成员函数的种类3.下述静态数据成员的特征中,()是错误的。
(2分)A. 静态数据成员要在类体外进行初始化B. 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符C. 静态数据成员不是所有对象所共用的D. 说明静态数据成员时前边要加修饰符static已知类A是类B的友元,类B是类C的友元,则()。
C++期末复习题资料

C++期末复习题资料1.下列的各类函数中,不是类的成员函数。
( C )A)构造函数 B)析构函数 C)友元函数 D)拷贝初始化构造函数2.作用域运算符“::”的功能是:( B )A)标识作用域的级别的 B)指出作用域的范围的C)给定作用域的大小的 D)标识成员是属于哪个类的3.下列说明中const char *ptr;其中ptr应该是:( C )A)指向字符常量的指针 B)指向字符的常量指针C)指向字符串常量的指针 D)指向字符串的常量指针4.已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,是正确的。
( A )A)void print()const;B)const void print();C)void const print(): D)void print(const);5.在类定义的外部,可以被访问的成员有( C )A)所有类成员B)private的类成员C)public的类成员D)public或private的类成员6.关于类和对象不正确的说法是:( C )A)类是一种类型,它封装了数据和操作 B)对象是类的实例C)一个类的对象只有一个D)一个对象必属于某个类7.在C++中,类与类之间的继承关系具有( C )A)自反性 B)对称性 C)传递性 D)反对称性8.C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是:( B )A)面向过程 B)面向对象 C)安全性 D)复用性9.在C++中实现封装是借助于( B )A)枚举B) 类C) 数组D)函数10.在C++中用( D )能够实现将参数值带回。
a)数组b)指针c)引用d)上述ABC都可11.考虑函数原型void test(int a,int b=7,char ch="*"),下面的函数调用中,属于不合法调用的是:( C )A)test(5) B)test(5,8)C)test(6,"#") D)test(0,0,"*");12.已知: int m=10;下列表示引用的方法中,正确的是:( C )A)int &Z;B)int &t=10;C)int &X=m;D)float &f=&m;13.定义析构函数时,应该注意:( C )A)其名与类名完全相同 B)返回类型是void类型C)无形参,也不可重载D)函数体中必须有delete语句14.在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( B )A)受限制B)保持不变C)受保护D)不受保护15.下列不是函数重载所要求的条件是:( D )A)函数名相同 B)参数个数不同C)参数类型不同D)函数返回值类型不同16.在C++中执行以下4条语句后输出rad值为:( C )static int hot=200;int &rad=hot;hot=hot+100;cout<<rad<<endl;< p="">A) 0 B) 100 C) 300D) 20017.类clase CC1的说明如下,错误的语句是:( A )clase CC1{int a=2; //(A)CC1(); //(B)public:CC1(int val); //(C)~CC1(); //(D)};18.下列各类函数中,不是类的成员函数是:( C )A)构造函数 B)析构函数C)友元函数D)拷贝构造函数19.类的指针成员的初始化是通过函数完成的,这个函数通常是:( B ) A)析构函数B) 构造函数C)其它成员函数D)友元函数20.关于构造函数的说法,不正确的是:( A )A)没有定义构造函数时,系统将不会调用它 B)其名与类名完全相同C)它在对象被创建时由系统自动调用D)没有返回值21.按解释中的要求在下列程序划线处填入的正确语句是:( C )#includeclass Base{public:voidfun(){cout<<"Base::fun"<<endl< p=""> ;}};class Derived:public Base{public:void fun(){ //在此空格处调用基类的函数fun()cout<<"Derived::fun"<<endl< p=""> ;}};A)fun();B)Base.fun();C)Base::fun();D)Base->fun();22.在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( C )A)受限制B)保持不变C)受保护D)不受保护23.通常拷贝构造函数的参数是:( C )A)对象名B)对象的成员名C)对象的引用名D)对象的指针名24.下列描述中,正确的是:( D )A)所有的运算符号都可以重载。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C+=模板定义
1、模板的概念:
在C++中,模板是泛型编程的基础。
模板是创建类或函数的蓝图或公式。
2、定义函数模板:
模板定义以template关键字开始,后接模板形参表(用<>括起来),多个模板形参用逗号隔开。
模板形参的名字没有实际意义。
1)模板形参表:模型形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。
模板形参表不能为空。
2)使用模板函数:使用时,编译器会确定绑定到模板形参的模板实参类型。
编译器确定用实际类型代替每个类型形参,用值代替每个非类型形参。
3)inline函数模板:如,template <type T> T max(const T&, const T&);
模板函数定义和使用示例:
#include <iostream>
using std::cout;
using std::endl;
//定义模板函数
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(){
cout<<compare(1,2)<<endl;
cout<<compare("a","A")<<endl;
system("pause");
return 0;
}
3、定义类模板
在类声明前加上template <class T>,其余部分与类的声明基本一致。
类模板可以定义数据成员、函数成员和类型成员,构造函数和析构函数等。
也可以使用标号控制对成员的访问。
在类和类的成员中,可以使用模板形参作为类型或值的占位符,在使用类时再提供那些类型或值。
类模板示例:
template <class T>
class Queue {
public:
Queue();
T &front();
const T &front()const;
void push(const T &);
void pop();
bool empty()const;
};
使用类模板:
使用类模板时,必须为模板形参显示指定实参。
如:
Queue<int> qi;
Queue<string> qs;
Queue< vector<double> > qc;
模板形参:。