作业2024/2/4

第三章  类与构造函数

一.选择题

   1、下列不能作为类的成员的是(B

A. 自身类对象的指针

B. 自身类对象

C. 自身类对象的引用

D. 另一个类的对象

   2、假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为(B

A. x.a

B. x.a()

C. x->a

D. (*x).a()

3、已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,正确的是(B

A. A1.p=5;

B. A1->p=5;

C. A1.*p=5;

D. *A1.p=5;

 4、下列不具有访问权限属性的是(A

A. 非类成员

B. 类成员

C. 数据成员

D. 函数成员

 5、 下面的叙述中那个是不正确的是____C___

     A 类必须提供至少一个构造函数

     B 默认构造函数的形参列表中没有形参

     C 如果一个类没有有意义的默认值,则该类不应该提供默认构造函数

     D 如果一个类没有定义默认构造函数,则编译器会自动生成一个,同时将每个数据成员初始化为相关类型的默认值

二.填空题

1、给出下面程序输出结果。

#include

using namespace std;

class Test

{   int x,y;

public:

Test(int i,int j=0)

{x=i;y=j;}

int get(int i,int j)

{return i+j;}

};

int main()

{ Test t1(2),t2(4,6);

int (Test::*p)(int,int);

p=&Test::get;

cout<<(t1.*p)(5,10)<

Test *p1=&t2;

cout<<(p1->*p)(7,20)<

}

15

27

2、下面程序运行的结果是:5+10=15。

#include

class Test

{ private:

int x,y;

public:

Test() {x=y=0;}

void Setxy(int x,int y) {__this->x=x+y;____}

void show(){__cout << this->x << endl;____}

};

int main()

{  Test ptr;

ptr.Setxy(5,10);

ptr.show();

}

3、请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:

11,   10

13,   12

#include

class A

{int a;

public:

A(int i=0){a=i;}

int Geta(){return a;}

void show(){cout<

};

class B

{

A a;

int b;

public:

B(int i,int j):_b(i)___,_a(j)_____

{   }

void show(){cout<

};

void main()

{   B   b[2]={B(10,11),B(12,13)};

for(int i=0;i<2;i++)

__b[i].show;________

}

三、改错题

 1. #include .h>

class Test

{ private:

int x,y=20;

public:

Test(int i,int j){ x=i,y=j; }

int getx(){return x;}

int gety(){return y;}

};

void main()

{  Test mt(10,20);

cout<

cout<

}

错误点一去掉头文件后的.h

二加上命名空间using namespace std;

三void main 改成int main

2. #include

class Test

{int x,y;

public:

void fun(int i,int j)

{x=i;y=j;}

void fun(){x=y=0;}

void fun(int i)

{x=i;}

void show()

{

cout<<"x="<

if(y)

cout<<",y="<

cout<

}

};

int main()

{  Test a;

   a.fun( )

a.fun(1);

a.show();

a.fun(2,4);

a.show();

}

错误点一去掉头文件后的.h

二加上命名空间using namespace std;

3. #include

class X

{  public:

int x;

public:

X(int x)

{cout<< this->x=x <

X(X&t)

{x=t.x;

cout<

}

void fun(X);

};

void fun(X t)

{ cout<

void main()

{ fun(X(10));}

错误点一去掉头文件后的.h

二加上命名空间using namespace std;

X(X&t)改成X(const X&t)

四void main 改成int main

4. #include

#include

class Bas

{  public:

Bas(char *s="\0"){strcpy(name,s);}

void show();

protected:

char name[20];

};

Bas b;

void show()

{   cout<<"name:"<

void main()

{

Bas d2("hello");

show();

}

错误点一去掉c++头文件后的.h

二加上命名空间using namespace std;

改后代码

#include

#include

using namespace std;

class Bas {

public:

    Bas(const char* s = "\0") {

        strcpy(name, s);

    }

    void show();

protected:

    char name[20];

};

Bas b;

void Bas::show() {

    cout << "name: " << name << endl;

}

int main() {

    Bas d2("hello");

    d2.show();

    return 0;

}

四、编程题

4.1   a: 编写一个类Person,表示一个人的名字和地址,使用string来保存每个元素

   b:为Person提供一个接受两个string参数的构造函数

  c:提供返回名字和地址的操作

  d:指明Person的那个成员应声明为public,那个成员应声明为private

#include

#include

class Person {

private:

    std::string name;

    std::string address;

public:

    Person(const std::string& name, const std::string& address) {

        this->name = name;

        this->address = address;

    }

    std::string getName() const {

        return name;

    }

    std::string getAddress() const {

        return address;

    }

};

int main() {

    Person person("John Doe", "123 Main Street");

    std::cout << "Name: " << person.getName() << std::endl;

    std::cout << "Address: " << person.getAddress() << std::endl;

    return 0;

}

你可能感兴趣的:(c++,算法,开发语言)