股票

C++类对象

C++++中的类就是把struct这种特殊的数据类型强化了一下,变成包括普通数据类型和函数的特殊的“struct”,连调用方法都一样!

1,基本用法

首先是类声明:

class World

{

private:

float mass;

char name[20];

public:

void tellall(void);

…… 

};

private表示是私有的,就是只能这个类中的函数才能调用;

public表示对外开放,在别的函数中也可以使用,但是要加类名。

类声明之后就可以定义了:

void World::tellall(void)

{

std::cout << mass << std::endl;

std::cout << name << std::endl;

}

因为tellall()是类World之中的函数,所以前面要使用::操作符表示是对World这个类里面的tellall()函数进行定义,因为说不定别的类里面也有tellall()这个函数。类函数可以直接使用private里面的变量,不需要加什么前缀操作符之类,因为他们是一家子的。

下面到使用阶段:

因为类虽然是一个特殊的“struct”,但也是数据类型不是,所以直接声明变量:

World test;

这样test就是World类对象了,private里面的对象就不要想了,外部函数用不了,只能使用public中的,用法与struct对象一样:

test.tellall();

这样就调用了World类里面的tellall()函数.

2,类的初始化

a,World()函数初始化。

实际上,类对象在声明的时候都有一个初始化,用的时函数World()(没错,跟类一个名字,就当重载好了)。当我们在类声明里面没有指定World()的时候,编译器会给我们做一个World()函数,并定义为空函数,在声明变量的时候对变量进行初始化。但是这个时候的类是个空类,直接使用tellall()类函数会报错,必须先初始化了具体数据才可以使用。如果我们在声明里面做了声明,并在类实现里定义了函数原型,编译器就会按照函数原型对类型进行声明,并给变量响应的值,这时候再调用tellall()就不会出错了。

World::World()

{

mass = 0.0;

strcpy(name, “maydolly”);

}

b,World(double, char *)函数重载初始化

另一种初始化方法就是命名一个名字和类名字一样,但是有参数的函数,也是重载的方法,这样初始化的时候可以填入指定的值了。

World::World(double ms, char * na)

{

mass = ms;

strcpy(name, na);

}

声明变量的时候可以用:

World test1 = World(5.5, “maydolly”);

World test2(5.5, “maydolly”);

当然还可以使用指针

World * test3 = new World(5.5,“maydolly”);

3,类释放

当类释放的时候,编译器会默认一个释放函数~World(),没有参数。当然我们也可以丰富一下这个函数,先声明,然后定义:

World::~World()

{

std:: <<“Bye, ” << name << std::endl;

}

4,const与类

想在类函数使用的时候保护类中的数据,可以添加const操作符。

对类函数中调用参数的保护,const用法和平常一样,但是对整个类进行保护时,const放在函数名后面:

声明:void World::tellall() const;

定义:void World::tellall() const {……}

5,this用法(类返回)

a,类函数返回类本身

有点儿拗口,就是类test1的函数topval(),在函数中需要返回test1时,使用(*)this返回。this指示的是test1的地址,根据返回类型确定是this还是*this。

const Stock & Stock::topval(const Stock & s) const

{

if(s.total_val > total_val)

return s;// 返回类对象s

else

return this;// 返回类函数的类对象

}

这里,使用的时候为test3 = test1.topval(test2); 函数返回test1或者test2给test3.

b,类函数中新建类的返回

Stock Stock::sum(Stock & test1, Stock & test2)

{

Stock test;

test.total_val = test1.total_val+test2.total_val;

return test;

}

注意这里的返回类型不能是Stock &, 即不能是类的引用。因为test是局部变量,如果在类函数sum()结束的时候会被释放,如果返回是test的引用,test释放掉之后,引用也没用了,所以需要返回test。这时候返回的是test的副本,不会被释放掉。

6,类对象数组

和普通数组对象声明方法一样:

Stock mystuff[4];

或者自带初始化

Stock stocks[4] = {

Stock(“NanoSmart”, 12.5, 20),

Stock(“Boffo Objects”, 200, 2.0)

};

前两个指定,后两个默认。

打赏
原文链接:,转发请注明来源!

发表评论