首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++新手 求解释一些概念下的有关问题

2013-02-27 
C++新手 求解释一些概念上的问题#include iostream#include stringusing namespace stdclass Student

C++新手 求解释一些概念上的问题
#include <iostream>
#include <string>
using namespace std;
class Student//声明基类
{
public: //公用部分
Student(
int n, string nam
) //基类构造函数
{
num=n;
name=nam;
}
void display( ) //成员函数,输出基类数据成员
{
cout<<″num:″<<num<<endl<<″name:″<<name<<endl;
}
protected: //保护部分
int num;
string name;
};
class Student1: public Student //声明公用派生类
Student1
{
public:
Student1(int n, string nam,int n1, string nam1,int a, string ad):Student(n,nam
),monitor(n1,nam1) //派生类构造函数
{
age=a;
addr=ad;
}
void show( )
{
cout<<″This student is:″<<endl;
display(); //输出num和name
cout<<″age:″<<age<<endl; //输出age
cout<<″address:″<<addr<<endl<<endl; //输出addr
}
void show_monitor( ) //成员函数,输出子对象
{
cout<<endl<<″Class monitor is:″<<endl;
monitor.display( ); //调用基类成员函数
}
private: //派生类的私有数据
Student monitor; //定义子对象(班长)
int age;
string addr;
};
1.想问下 如果成员变量 定义的是其他 自定义类 在写构造函数的时候是不是都是?
Student1(int n, string nam,int n1, string nam1,int a, string ad):Student(n,nam
),monitor(n1,nam1)
能不能写成 而不是把monitor 写在初始化列表里
Student1(int n, string nam,int n1, string nam1,int a, string ad):Student(n,nam
)
{
   monitor(n1,nam1);
}
2. 这样种形式 定义是一个对象Student monitor(x,y)我没有用new 给他开辟控件
那这个对象 被存在了内存的 哪个区里面  会不会刚定义过 出了构造函数 就消失了
3.上面的情况 Student monitor(x,y)是被当做另一个的属性 那如果 是在一个函数中做为局部对象 那是不是出了那个函数 他就没了
4.一个类在 new之后 会在堆里开辟控件 如果不new 的话 他被存在了那里 他的数据成员和函数成员又被存在了哪里
5.main函数 之上定义的 自动变量 作用域是从其下开始的整个程序 那这个自动变量被存在了内存的哪里
[解决办法]
1,不行的。那个不叫初始化了,非法赋值,
2,系统给它分配的,与你定义内置类型一样,存在栈中。
3,类属性只属于自己,与其他类的没有关系。
4,在栈里面。
5,在栈里面。
[解决办法]

1.想问下 如果成员变量 定义的是其他 自定义类 在写构造函数的时候是不是都是?
Student1(int n, string nam,int n1, string nam1,int a, string ad):Student(n,nam
),monitor(n1,nam1)
能不能写成 而不是把monitor 写在初始化列表里

Student1(int n, string nam,int n1, string nam1,int a, string ad)
        :Student(n,nam)
        {
           monitor(n1,nam1);
         }

答:不能。初始化带参数的基类构造函数只能在初始化列表里面实现。你的第二种方法在构造函数里面产生了一个临时变量,在构造函数返回时,该临时变量被释放,然后monitor成员没有被初始化。


2. 这样种形式 定义是一个对象Student monitor(x,y)我没有用new 给他开辟空间
那这个对象 被存在了内存的 哪个区里面  会不会刚定义过 出了构造函数 就消失了
答: monitor对象具有“automatic storage duration”, 一般说法是分配到栈上。 在对象的作用域内,该对象不会被释放。过了构造函数,说明该对象被构造完毕。比如
{
  Student monitor(x,y);
}// <--- monitor对象在此结束

3.上面的情况 Student monitor(x,y)是被当做另一个的属性 那如果 是在一个函数中做为局部对象 那是不是出了那个函数 他就没了


答: 是的

4.一个类在 new之后 会在堆里开辟控件 如果不new 的话 他被存在了那里 他的数据成员和函数成员又被存在了哪里
答: 看2的答案。 他的数据成员存在哪里看数据成员的类型了,如果你数据成员有指针,然后你调用new来为他们分配空间,那么他们存在堆上。 函数是没有分配空间的。

5.main函数 之上定义的 自动变量 作用域是从其下开始的整个程序 那这个自动变量被存在了内存的哪里
看不懂你的这个问题。

热点排行