利用类定义一个指针会调用默认构造函数吗_C++ | 类和对象

本文详细介绍了C++中的类和对象,包括类的定义、对象的存储空间、构造函数、析构函数、内联函数和成员函数的重载。重点讨论了如何初始化和撤销对象,以及构造函数和析构函数的调用时机。同时提到了this指针在成员函数中的应用。
摘要由CSDN通过智能技术生成

内容

  1. 类和对象的定义
  2. 构造函数和析构函数
  3. 内联函数和外联函数
  4. 成员函数的重载
  5. this指针

累积了很多周的网课笔记,脑壳疼,po在知乎上方便复习啦。


一 类和对象的定义

1 类和对象的定义形式

1)

class <类名>
 {
     [ [private:] //私有成员,缺省存取权限
 <数据成员及成员函数 > ]
 [ public: //公有成员
 <数据成员及成员函数 > ]
 [ protected: //保护成员
 <数据成员及成员函数 > ]
 };

注:

私有成员:只允许类内成员函数存取它

公有成员:允许类内和类外函数存取它

保护成员:允许类内和其派生类函数存取它

例:

定义描述一个人的类 Person,源程序文件名为Person.h

#include <iostream>
#include <string>
using namespace std;
class Person
{
     private:  // 此处,private可缺省 
       char Name[20]; //姓名
       char Sex; //性别,三个数据成员
       int Age; //年龄
 public: // 以下定义了四个成员函数
  void SetData(char n[ ], char s, int a) 
  {
    
     strcpy(Name, n); //直接访问Name
     Sex=s; //直接访问Sex 访问特性
     Age=a; //直接访问Age
  } 
  void GetName( char *n ) // 函数
  {
    
      strcpy(n, Name);
  }
  char GetSex( ) // 函数
  {
    
      return Sex;
  }
  int GetAge( ) // 函数
  {
    
      return Age;
  }
}; // 注意:类定义结束处的分号不能少

2)

类是一种类型,该类型的变量称为对象(实例)

对象的定义:

<类名> <对象列表>;

例:

Person a, b ; // 定义a、b两个对象
Person *pa, *pb, x[10];  // pa和pb是两个Person类型指针, x是对象数组

2 对象成员的访问

e30b66b23cea36afbeedf338526e88be.png

3 成员函数的定义

1)在类体内定义成员函数

见上

2)在类体外定义成员函数

#include <iostream> //程序文件名为Person.h
#include <string>
using namespace std;
class Person
{
      char Name[20]; //姓名 //注意缺省 private
   char Sex; //性别 
  int Age; //年龄
public:
 void SetData(char [ ], char , int );
 void GetName(char *);
 char GetSex( );
 int GetAge( );
};
void Person::SetData(char n[ ], char s, int a) 
{
    
 strcpy(Name, n);
 Sex=s;
 Age=a;
}
 
void Person::GetName( char *n )
{
    
 strcpy(n, Name);
}
char Person::GetSex( ) 
{
    
 return Sex;
}
 
int Person::GetAge( )
{
    
 return Age;
}

3)主函数

#include "Person.h" //包含1)或2)中的头文件
using namespace std;
void main( )
{
    
 Person a, *pa;
 char name[20];
//以下通过对象访问成员
 a.SetData("Cheng", 'F', 20);
 a.GetName(name);
 cout << "Name: " << name <<endl;
 cout << " Sex: " << a.GetSex( ) << endl;
 cout << " Age: " << a.GetAge( ) << endl;
//以下通过指针访问成员
pa=&a;
 pa->SetData("Zhang", 'M', 18);
 pa->GetName(name);
 cout << "Name: " << name <<endl;
 cout << " Sex: " << pa->GetSex( ) << endl;
 cout << " Age: " << pa->GetAge( ) << endl;
}

4 对象的存储空间

对象存储空间的分配和撤销是系统根据对象的作用域自动完成的,即进入对象作用域时,系统自动为对象分配空间;退出对象作用域时,系统自动撤销对象空间。

系统为每个对象分配储存空间,用于存放该对象具体的数据成员值。所有对象的成员函数的代码是相同的,因此系统将成员函数的存储空间处理成该类的所有对象共享同一代码空间。因此一个对象的存储空间是对象自身数据成员的存储空间。

例:

Person a, b, *pa=&a, *pb=&b;
a.SetData("Cheng", 'F', 20);
b.SetData("Zhang", 'M', 18);

6cc6058531b8fe865fbd96e02598705c.png
对象数据成员的存储空间

5 说明

1)类中数据成员的类型可以是任意的,但自身类的对象不可以作为成员。

class Person
{
     char Name[20]; 
 char Sex;
 int Age;
 Obj obj1, obj2; // 可以
 Person a, b; // 不可以
 Person *pa; // 可以
 ......
};

2) 若类的使用在前,定义在后,则需引用性说明。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值