/**
*cppTest-6.2:对象成员
*
*类类型的成员即对象成员,这个例子展示了如何初始化对象成员和一般成员。
*author 炜sama
*/
#include<iostream.h>
#include<string.h>
//这个在下面要用到的类要在调用之前定义!......
//class string;//经过测试发现,这种类似于函数调用前先声明的方式对类不起作用!唯一起作用时刻就是当涉及到友元函数时。
class string{
private:
char *str;
public:
string(char *s){
str=new char[strlen(s)+1];
strcpy(str,s);
}
string(string &a)
{
str=new char[strlen(a.str)+1];
strcpy(str,a.str);
}
~string(){ delete str; }
void show(){ cout<<str; }
};
class person{
string name;//这个成员是类类型,故称之为对象成员
char sex;
int age;
public:
//对象成员初始化与一般成员不一样!不能直接赋值,而是:X::X(arg1,arg2,...,argn):memb1(arg1),memb2(arg2),...,membn(argn)
//总之,对象成员一定要用这种方式来初始化,其他成员的初始化方式参考我的【cppTest-6.0:类中特殊的成员的初始化】。
//经过测试发现成员的先后顺序怎样都可以。
//person(char *xm,char xb,int nl):name(xm),sex(xb),age(nl){}//正确!大括号不能漏!
//person(char *xm,char xb,int nl):name(xm){sex=xb;age=nl;}//正确!大括号不能漏!
//person(char *xm,char xb,int nl):name(xm),age(nl){sex=xb;}//正确!大括号不能漏!
//person(char *xm,char xb,int nl){name=xm;sex=xb;age=nl;}//错误!对象成员不能用普通方式初始化!
person(char *xm,char xb,int nl):sex(xb),name(xm),age(nl){sex='f';}//正确!普通成员可以两种方式同时赋值都没问题。
//使用这个构造函数输出的sex为f而不是m!!说明初始化顺序是参数列表再到构造函数内部代码!!
void show()
{
cout<<"name:";
name.show();
cout<<",age:"<<age;
cout<<",sex:"<<sex;
cout<<endl;
}
};
void main()
{
person zh("zhang",'m',20);
zh.show();
}
cppTest-6.2:对象成员
最新推荐文章于 2020-02-29 19:10:37 发布