又有问题了~~在线等~~谢谢~解决马上结帖!

时间:2022-01-15 19:04:51
这是我考试的两道试卷的题,老是搞不定,来这里请各位高手---指教了--
希望大家能抽出一点点时间就可以帮我这个菜鸟解决很大的困惑了,~~~从心底感谢你们!!:)
顺祝  身体健康,元旦快乐  新年新气象~~`UP有分(1分):)

第一题:
#include <iostream.h>
class M
 {
  public:
         M(){a=b=0;} ;
         M(int i,int j){a=i;b=j;};
         void print(){cout<<a<<","<<b<<endl;};
  private:int a,b;}

void main()
 {
   M m[2][4];                                 //调用哪个构造函数?这里不明白
   int x=10,y=10;
   for(int i=0;i<2;i++)
   for(int j=0;j<4;j++) m[i][j]=M(i+=2,j+=10);
   M(*pm)[4](m);                               //这句也不明白什么意思
   for(int i=0;i<2;i++)
      {cout endl;
       for(int j=0;j<4;j++) (*(*(pm+i)+j))      //这句呢(*(*(pm+i)+j)),我最怵带很多*
      print();}                                 //号的题目了,*号一是说指针,另个是取址
      cout<<endl;                               //还有别的意思吗,比如   M(*pm)??
   }

第二题:
class student
  {
    public:
       student(char *pName="no name")          
         {
           strncpy(name,pName,sizeof(name));   
           name[sizeof(name)-1]="\0";
         }
    protected:
         char name[40];
    };

void fn(int noOfObjects)
   {
     student *ps=new student[noOfObjects];      //student[noOfObjects]--这句什么意思,还有就是分      //省略                                     //配堆对象这块不是很明白,能详细解释一下吗?谢谢  
     delete[]ps;
   }

   谢谢大家了,真的!!!

14 个解决方案

#1


穷学生一个
C++学的不好
但是喜欢
请各位帮忙了~:)

#2


会用vc设断点,调试吗?

#3


M m[2][4]; // 调用缺省构造函数
M(*pm)[4](m); // pm 的类型是: M(*)[4] (也就是指向一个数组的指针,用 m 初始化)
(*(*(pm+i)+j)) 相当于 pm[i][j]

#4


M m[2][4]  调用的是没有参数的构造函数
这里的作用是  定义一个2*4的矩阵  里面的元素为  struct类型的
但是  没有传构造函数的参数

M(*pm)[4](m)  这句  不懂

(*(*(pm+i)+j))  是求数组的第  i行j列的元素

new  的作用是开辟一块new后面跟的 数据类型的空间 
可以是基本数据类型  可以是自己定义的数据类型  这里是struct类型的

new的返回值是  开辟的空间的指针   就是这个指针是指向开辟的空间的
返回值类型  必须与开辟的空间的类型一致
eg 
int *p;
p=new int;

#5


等了半天也不见人,希望明天来的时候……

顺便问一下这个题,这个题很简单,就是我不知道为什么运行不了~~报错信息如下:
我用的是C++build
#include <iostream.h>

class MyClass
 {
  public:
     MyClass();
     MyClass(int);
     ~MyClass();
     void Display();
  protected:
     int number;
 }

MyClass::MyClass()
{
cout<<"Constructing normally\n";
}
MyClass::MyClass(int m)
{
 number=m;
 cout<<"Constructing with a number:"<<number<<endl;
 }

void MyClass::Display()
 {
   cout<<"Display a number:"<<number<<endl;
 }
MyClass::~MyClass()
{
 cout<<"Destructing \n";
}

void main()
{
 MyClass obj1;
 MyClass obj2(20);

 obj1.Display();
 obj2.Display();

}
抱错信息如下:
[C++ Error] Unit1.cpp(15): E2111 Type 'MyClass' may not be defined here
[C++ Error] Unit1.cpp(15): E2136 Constructor cannot have a return type specification

但是,我的那个MyClass()已经定义了啊,为什么报这中错呢?
 
谢谢回答我问题的所有同志们!!!

#6


类的定义后面好象是少了一个  分号!

#7


class MyClass
 {
  public:
     MyClass();
     MyClass(int);
     ~MyClass();
     void Display();
  protected:
     int number;
 };//此处要有分号,一个很小的疏忽。很多人都记不住

#8


你的几个问题都是由于同一个原因,即声明一个类后要加分号.

#9


up

#10


(*(*(pm+i)+j)) 就是pm[i][j],*(a+i)就是a[i]

#11


up

#12


M m[2][4]  调用的是没有参数的构造函数

M(*pm)[4](m); // pm M类型的指针指向一个数组,其大小为4(用 m 初始化)

(*(*(pm+i)+j)) 相当于 pm[i][j]

student *ps=new student[noOfObjects];    指针ps指向一个新的内存分配区,大小为noOfObjects个  student;

#13


怎么没有见pm在那里定义的?
m是  2*4 的
怎么被  [4]  这样的数组初始化了?
不懂

#14


#include <iostream.h>
class M
 {
  public:
         M(){a=b=0;} ;
         M(int i,int j){a=i;b=j;};
         void print(){cout<<a<<","<<b<<endl;};
  private:int a,b;}       //这里少了个;吧!

void main()
 {
   M m[2][4];                                 //调用 M(){a=b=0;} 
   int x=10,y=10;
   for(int i=0;i<2;i++)
   for(int j=0;j<4;j++) m[i][j]=M(i+=2,j+=10);
   M(*pm)[4](m);                           //相当与 M (*pm)[4]=m,pm是数组的行指针
   for(int i=0;i<2;i++)
      {cout endl;
       for(int j=0;j<4;j++) (*(*(pm+i)+j)) //应为是二远数组有行列指针之分,这里等价与pm[i][j]   
  print();}                                cout<<endl;                               
   }

第二题:
class student
  {
    public:
       student(char *pName="no name")          
         {
           strncpy(name,pName,sizeof(name));   
           name[sizeof(name)-1]="\0";
         }
    protected:
         char name[40];
    };

void fn(int string)//把noOfObjects换成string是不是好看些
   {
     student *ps=new student[string];//这里是建一个指针对象ps,调用构造函数
                                   //student(char *pName=string)               
     delete[]ps;                   
   }



你下一个程序,上面的兄弟说得很清楚,少了;

#1


穷学生一个
C++学的不好
但是喜欢
请各位帮忙了~:)

#2


会用vc设断点,调试吗?

#3


M m[2][4]; // 调用缺省构造函数
M(*pm)[4](m); // pm 的类型是: M(*)[4] (也就是指向一个数组的指针,用 m 初始化)
(*(*(pm+i)+j)) 相当于 pm[i][j]

#4


M m[2][4]  调用的是没有参数的构造函数
这里的作用是  定义一个2*4的矩阵  里面的元素为  struct类型的
但是  没有传构造函数的参数

M(*pm)[4](m)  这句  不懂

(*(*(pm+i)+j))  是求数组的第  i行j列的元素

new  的作用是开辟一块new后面跟的 数据类型的空间 
可以是基本数据类型  可以是自己定义的数据类型  这里是struct类型的

new的返回值是  开辟的空间的指针   就是这个指针是指向开辟的空间的
返回值类型  必须与开辟的空间的类型一致
eg 
int *p;
p=new int;

#5


等了半天也不见人,希望明天来的时候……

顺便问一下这个题,这个题很简单,就是我不知道为什么运行不了~~报错信息如下:
我用的是C++build
#include <iostream.h>

class MyClass
 {
  public:
     MyClass();
     MyClass(int);
     ~MyClass();
     void Display();
  protected:
     int number;
 }

MyClass::MyClass()
{
cout<<"Constructing normally\n";
}
MyClass::MyClass(int m)
{
 number=m;
 cout<<"Constructing with a number:"<<number<<endl;
 }

void MyClass::Display()
 {
   cout<<"Display a number:"<<number<<endl;
 }
MyClass::~MyClass()
{
 cout<<"Destructing \n";
}

void main()
{
 MyClass obj1;
 MyClass obj2(20);

 obj1.Display();
 obj2.Display();

}
抱错信息如下:
[C++ Error] Unit1.cpp(15): E2111 Type 'MyClass' may not be defined here
[C++ Error] Unit1.cpp(15): E2136 Constructor cannot have a return type specification

但是,我的那个MyClass()已经定义了啊,为什么报这中错呢?
 
谢谢回答我问题的所有同志们!!!

#6


类的定义后面好象是少了一个  分号!

#7


class MyClass
 {
  public:
     MyClass();
     MyClass(int);
     ~MyClass();
     void Display();
  protected:
     int number;
 };//此处要有分号,一个很小的疏忽。很多人都记不住

#8


你的几个问题都是由于同一个原因,即声明一个类后要加分号.

#9


up

#10


(*(*(pm+i)+j)) 就是pm[i][j],*(a+i)就是a[i]

#11


up

#12


M m[2][4]  调用的是没有参数的构造函数

M(*pm)[4](m); // pm M类型的指针指向一个数组,其大小为4(用 m 初始化)

(*(*(pm+i)+j)) 相当于 pm[i][j]

student *ps=new student[noOfObjects];    指针ps指向一个新的内存分配区,大小为noOfObjects个  student;

#13


怎么没有见pm在那里定义的?
m是  2*4 的
怎么被  [4]  这样的数组初始化了?
不懂

#14


#include <iostream.h>
class M
 {
  public:
         M(){a=b=0;} ;
         M(int i,int j){a=i;b=j;};
         void print(){cout<<a<<","<<b<<endl;};
  private:int a,b;}       //这里少了个;吧!

void main()
 {
   M m[2][4];                                 //调用 M(){a=b=0;} 
   int x=10,y=10;
   for(int i=0;i<2;i++)
   for(int j=0;j<4;j++) m[i][j]=M(i+=2,j+=10);
   M(*pm)[4](m);                           //相当与 M (*pm)[4]=m,pm是数组的行指针
   for(int i=0;i<2;i++)
      {cout endl;
       for(int j=0;j<4;j++) (*(*(pm+i)+j)) //应为是二远数组有行列指针之分,这里等价与pm[i][j]   
  print();}                                cout<<endl;                               
   }

第二题:
class student
  {
    public:
       student(char *pName="no name")          
         {
           strncpy(name,pName,sizeof(name));   
           name[sizeof(name)-1]="\0";
         }
    protected:
         char name[40];
    };

void fn(int string)//把noOfObjects换成string是不是好看些
   {
     student *ps=new student[string];//这里是建一个指针对象ps,调用构造函数
                                   //student(char *pName=string)               
     delete[]ps;                   
   }



你下一个程序,上面的兄弟说得很清楚,少了;