niusouti.com

有如下类定义:class Point{int x__, y__;public:Point(): x_(0), y_(0) {}Point(int x, int y =0): x_(x), y_(y) {}若执行语句Point a(2),b[3], *c[4];则Point 类的构造函数被调用的次数是( )。A.2次B.3次C.4次D.5次

题目

有如下类定义:class Point{int x__, y__;public:Point(): x_(0), y_(0) {}Point(int x, int y =0): x_(x), y_(y) {}若执行语句Point a(2),b[3], *c[4];则Point 类的构造函数被调用的次数是( )。

A.2次

B.3次

C.4次

D.5次


相似考题
更多“有如下类定义:class Point{int x__, y__;public:Point(): x_(0), y_(0) {}Point(int x, int y =0 ”相关问题
  • 第1题:

    有如下程序: #inClude<iostream> using namespaCe std; Class Point{ publiC: statiC int number; publiC: Point( )t.number++;} ~Point( ){number--;} }; , int P0int::number=0; int main( ){ Point *ptr: Point A,B; Point*ptr_point=new Point[3]; ptr=ptr_point;’ } Point C; Cout<<Point:::number<<endl; delete[]ptr; return 0; } 执行这个程序的输出结果是( )。

    A.3

    B.4

    C.6

    D.7


    正确答案:C
    本题考查默认构造函数.题目中定义.个对象A、B以及对象数组Point[3],又定义了对象C,共执行6次构造函数,number变为了6,所以本题答案为C。

  • 第2题:

    typedef的用法?

    #include<stdio.h>

    typedef char (*pt)(int);

    pt point;

    char gl(int a){return 0;}

    void main()

    {

    point=gl;

    printf("%d",point(2));

    }

    我把point(2)改为(*point)(2)也是正确的,那么这两种形式的调用有什么区别没。后者说,各表示什么意义???


    typedef用法小结:
     在C语言的情况下,与C++稍有出入。typedef在结构体定义,还有一些数组等地方都大量的用到。归纳一下:
    来源一:Using typedef to Curb Miscreant Code
    Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮。
    typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。本文下面将竭尽全力来揭示 typedef 强大功能以及如何避免一些常见的陷阱。
    如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法?
    使用 typedef 为现有类型创建同义字。
    定义易于记忆的类型名
    typedef 使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。类型出现在所声明的变量名字中,位于 ''typedef'' 关键字右边。例如:
    typedef int size;
    此声明定义了一个 int 的同义字,名字为 size。注意 typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要 int 的上下文中使用 size:
    void measure(size * psz);
    size array[4];
    size len = file.getlength();
    std::vector<size> vs;
    typedef 还可以掩饰复合类型,如指针和数组。例如,你不用象下面这样重复定义有 81 个字符元素的数组:
    char line[81];
    char text[81];
    定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样:
    typedef char Line[81];
    Line text, secondline;
    getline(text);
    同样,可以象下面这样隐藏指针语法:
    typedef char * pstr;
    int mystrcmp(pstr, pstr);
    这里将带我们到达第一个 typedef 陷阱。标准函数 strcmp()有两个‘ const char *'类型的参数。因此,它可能会误导人们象下面这样声明 mystrcmp():
    int mystrcmp(const pstr, const pstr);
    用GNU的gcc和g++编译器,是会出现警告的,按照顺序,‘const pstr'被解释为‘char* const‘(一个指向 char 的常量指针),而不是‘char *'(指向char 的指针)。这个问题很容易解决:
    typedef const cpstr;
    int mystrcmp(cpstr, cpstr); // 现在是正确的
    记住:不管什么时候,只要为指针声明 typedef,那么都要在最终的 typedef 名称中加一个 const,以使得该指针本身所指对象不会通过指针被修改。
    链表中的大概应用
    name 保存在结构体单元的name[20] 数组里;
    typedef struct node
    {
    char name[20];
    struct node *link;
    }stu; 这是前面定义的结构体变量,一个单元包含两个部分,一个用来存储name的数组name[20],一个用来存放下一个单元地址的指向结构体node的指针。假设该单元的地址是p,那么p->name 表示第一部分name[20]的地址,p->link表示第二部分,作用是存放下一个单元的地址。

    在C语言的情况下,与C++稍有出入。typedef在结构体定义,还有一些数组等地方都大量的用到。归纳一下:   来源一:Using typedef to Curb Miscreant Code   Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮。   typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。本文下面将竭尽全力来揭示 typedef 强大功能以及如何避免一些常见的陷阱。   如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法?   使用 typedef 为现有类型创建同义字。   定义易于记忆的类型名   typedef 使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。类型出现在所声明的变量名字中,位于 ''typedef'' 关键字右边。例如:   typedef int size;   此声明定义了一个 int 的同义字,名字为 size。注意 typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要 int 的上下文中使用 size:   void measure(size * psz);   size array[4];   size len = file.getlength();   std::vector<size> vs;   typedef 还可以掩饰复合类型,如指针和数组。例如,你不用象下面这样重复定义有 81 个字符元素的数组:   char line[81];   char text[81];   定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样:   typedef char Line[81];   Line text, secondline;   getline(text);   同样,可以象下面这样隐藏指针语法:   typedef char * pstr;   int mystrcmp(pstr, pstr);   这里将带我们到达第一个 typedef 陷阱。标准函数 strcmp()有两个‘ const char *'类型的参数。因此,它可能会误导人们象下面这样声明 mystrcmp():   int mystrcmp(const pstr, const pstr);   用GNU的gcc和g++编译器,是会出现警告的,按照顺序,‘const pstr'被解释为‘char* const‘(一个指向 char 的常量指针),而不是‘char *'(指向char 的指针)。这个问题很容易解决:   typedef const cpstr;   int mystrcmp(cpstr, cpstr); // 现在是正确的   记住:不管什么时候,只要为指针声明 typedef,那么都要在最终的 typedef 名称中加一个 const,以使得该指针本身所指对象不会通过指针被修改。   链表中的大概应用   name 保存在结构体单元的name[20] 数组里;   typedef struct node   {   char name[20];   struct node *link;   }stu; 这是前面定义的结构体变量,一个单元包含两个部分,一个用来存储name的数组name[20],一个用来存放下一个单元地址的指向结构体node的指针。假设该单元的地址是p,那么p->name 表示第一部分name[20]的地址,p->link表示第二部分,作用是存放下一个单元的地址

  • 第3题:

    有以下类定义 class Point{ public: Point{int x = 0, int y=0) {_x = x; _y = y;} void Move int xoff, int yoff) {_x +=xoff;_y+=yoff;} void Print() const {cout<<'('<<_x<<','<<_y<<')' << end1;} private: int_x,_y; }; 下列语句中会发生编译错误的是

    A.Point pt;pt.Print();

    B.const Point pt;pt.Print();

    C.Point pt;pt.Move(1, 2);

    D.const Point pt;pt.Move(1, 2)


    正确答案:D
    解析:本题考核常对象、常数据成员与常成员函数。如果将二个对象说明为常对象,则通过该常对象只能调用它的常成员函数,不能调用其他的成员函数,D选项中对象pt为常对象,而成员函数Move()不是常成员函数,所以这样调用会发生编译错误。

  • 第4题:

    有如下类定义: class Point { int x_,y_; public: Point():x_(0),y_(0){} Point(int x,int y=0):x_(x),y_(y){} }; 若执行语句 Point a(2),b[3],*c[4]; 则Point类的构造函数被调用的次数是

    A.2次

    B.3次

    C.4次

    D.5次


    正确答案:C
    解析:本题考查的知识点是类的构造函数。构造函数在对象被创建的时候由系统自动调用。在Point a(2),b[3],*c[4];语句中:a(2)是定义一个对象并传入构造参数2,所以此时会调用1次构造函数:b[3]是定义一个包含3个对象的数组,所以构造函数会被调用3次;而*c[4]定义的是一个包含4个Point类对象指针的数组,它并没有创建任何Point对象,故构造函数一次也不会被调用。故应该选择C。

  • 第5题:

    有以下类定义: class Point { public: Point(int x=0,int y=0){_x=x; _y=y;} void Move(int x Off, int y Off) {_x+=x Off; _y+=y Off; } void Print() const { cout <<'(' << _x << ',' << _y << ')'<< end 1;} private: int _x,_y; }下列语句中会发生编译错误的是______。

    A.Point pt; pr. Print();

    B.const Point pt; pt. Print();

    C.Point pt; pt. Move(1,2);

    D.const Point pt; pt. Move(1,2);


    正确答案:D
    解析:const修饰符改变值出错。