C++函数进阶功能之对象和类


以下未标注的都是C++特有的功能
类是一种用户定义的类型,对象是类的实例。比如int a中,int是类型,a是实例

类包括类声明和类方法定义两部分。类声明可以类比为函数原型,类方法可以类比为函数定义(注意只是类比)
类声明中,分为private私有部分(默认访问方式),和public公有部分。如果不标明访问方式,那么就是私有部分的访问方式。注意在类声明中,函数声明和普通的函数声明相同,即:不需要运算符(::)
类方法有两个特殊的特征。第一个是在定义类成员函数时,需要用作用域解析运算符(::)来标识函数所属的类,这也就意味着不同的类可以用同一函数重复定义而不产生冲突。注意在同一类中,成员函数之间可以相互调用而不加运算符(::)。第二个就是在类方法中可以访问私有成员。
定义在类声明以内的成员函数,都会自动地成为内联函数。
类中定义的名称(如数据成员名,成员函数名)的作用域都是整个类,不同的类可以定义相同的名称。

类构造函数

  1. 这是用来对私有数据进行初始化的,以防私有数据没有任何数值,然后就往下进行计算。
  2. 注意类构造函数的函数名和类名是相同的,并且是没有声明类型(说返回值也行)的,即:即使没有返回值,也没有声明为void。
  3. 由于类构造函数是用来构造对象的,所以不能用常规的(.)运算符来调用构造函数,因为那个时候对象还不存在。正确的调用方法是:
//法1
Stock food = Stock("hel", 201, 3.02);
//法2
Stock food("hel", 201, 3.02);
//还可以动态分配内存
Stock *PtrTofood = new Stock("hel", 201, 3.02);
  1. 默认构造函数,它的存在是为了,在定义了构造函数之后,以下的定义仍然有意义:
Stock stock1;

默认构造函数可以在构造函数的基础上,把构造函数的所有参数设一个默认初值即可。也可以重新构造一个没有参数的构造函数,利用函数重载的特点。当然从方便性来看,第一种更好。

析构函数

  1. 与构造函数类似的,析构函数没有声明类型(说返回值也行)的,即:即使没有返回值,也没有声明为void。
  2. 此外,析构函数没有输入的参数,而且函数名是符号(~)加上类名。
  3. 析构函数都是编译器自动地调用,通常不需要程序员显式地调用。
  4. 如果在构造函数里用了new,那么在析构函数中一定要用delete。如果没有用new,那么只需要写一个什么都不用干的析构函数即可。

类之间的赋值

直接用=即可完成每个数据成员的赋值。

this指针

this指针是指向调用成员函数的对象,即表示这个对象的地址。
比如在stock1.edit()函数中,可能需要返回此对象stock1本身,那么就应该return *this.

对象数组

和标准类型的数组相似。对象数组的定义如下:

Stock myself[4];
// another way
Stock myself[4] = {Stock("he", 201, 20.3),
Stock("hel", 201, 21.3),
Stock("hell", 201, 22.3),
Stock("helll", 201, 23.3)};

关于const的使用

  1. 在函数后面加const,表示此函数不能修改类对象的私有数据。例如
class A1
{
private:
....
public:
void show() const;
}
  1. 在形参中加const,意味着在函数中,不会修改形参的值,例如:
void A1::Save(const money) 
{
money = 2; //not allowed
...
}
  1. 在返回值中加const,意味着函数返回一个const常量值(即在此函数中,不能修改的值),例如:
const int A1::ReturnMoney() const
{
return Money_p; //Money_p is private data.
...
}

尤其需要注意的是,在函数内使用的局部变量不能用来返回成const的引用变量,因为一旦函数调用完成,局部变量就被释放了,此时的引用就相当于指向一个不存在的变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值