C++类的学习1(一)

简介: 的定义一般包括两部分,一是类的属性,二是他所拥有的方法。类的实例化是指给类的加载并初始化过程,比如一个people类,我们具体到每一个人就是类的实例化,此外一个类可以在此类上进行扩展。比如people类,我们分为 外国people 和 中国people,那么people叫做基类,外国people叫做派生类或子类

1.C++类的定义


C++使用class关键字定义一个类:


public:公共的行为或属性(类外可以调用);


private:表示该部分内容是私密的,不能被外部访问或调用,只能在类内调用;


protected:保护成员,和私有成员类似,不过在派生类可以调用;


比如我们建立一个people类

#include <iostream>
using namespace std;
class people{
  public:
    void a(){
      cout<<name;
    }
  private:
    string name="小明";
    void b(){
      cout<<"dsfsfds";  //不必在意;
    }
}; 
int main(){
  people cao;   //实例化
  cao.a();
  return 0;
} 

 

类的传参,比如我们要传入人的身高和体重,可以通过一个函数传入,传给私有变量;

#include <iostream>
using namespace std;
class people{
  public:
    void a(){
      cout<<name<<' '<<height<<' '<<weight;
    }
    void chuanru(int x,int y){   
//x,y是函数内的的变量,因此需要赋值给整个类的变量,作用域不同
      height=x;
      weight=y;
    } 
  private:
    string name="小明";
    int height;
    int weight; 
}; 
int main(){
  people cao;
  cao.chuanru(170,130);
  cao.a();
  return 0;
} 

此外类内的函数或者方法可以放到类外面,需要先在类内声明函数,通过“::”作用域操作符实现例如:

#include <iostream>
using namespace std;
class people{
  public:
    void a();
    void chuanru(int x,int y);   //函数声明
  private:
    string name="小明";
    int height;
    int weight; 
}; 
void people::a(){           //表面是people的a函数
      cout<<name<<' '<<height<<' '<<weight;
    }
void people::chuanru(int x,int y){
      height=x;
      weight=y;
    } 
int main(){
  people cao;
  cao.chuanru(170,130);
  cao.a();
  return 0;
} 

2.初识构造函数和析构函数


先不管那些拷贝构造函数和转换构造函数,我们先学习普通的,

#include <iostream>
using namespace std;
class people{
  public:
    people(int x=8,int y=9){    //构造函数,可以设置默认值
      height=x;
      weight=y;
    }
    void a(){
      cout<<name<<' '<<height<<' '<<weight;
    }
  private:
    string name="小明";
    int height;
    int weight; 
}; 
int main(){
  people cao(170,130);   //构造函数传参,
  cao.a();
  return 0;
} 

同理构造函数也可以放到类外面


#include <iostream>
using namespace std;
class people{
  public:
    people(int x,int y);
    void a();
  private:
    string name="小明";
    int height;
    int weight; 
}; 
people::people(int x=9,int y=8){    //类内或类外只能有一个地方初始化
      height=x;
      weight=y;
    }
void people::a(){
      cout<<name<<' '<<height<<' '<<weight;
    }
int main(){
  people cao(170,130);
  cao.a();
  return 0;
} 


构造函数用来初始化类,析构函数与构造函数相反;在对象生命周期结束后自动调用,用于在对象删除之前的清理工作,清理对象释放内存;

#include <iostream>
using namespace std;
class people{
  public:
    people(int x,int y);
    void a();
    ~people();
  private:
    string name="小明";
    int height;
    int weight; 
}; 
people::people(int x=9,int y=8){
      height=x;
      weight=y;
    }
people::~people(){
}
void people::a(){
      cout<<name<<' '<<height<<' '<<weight;
    }
int main(){
  people cao(170,130);
  cao.a();
  return 0;
} 

是生命周期结束,举个例子:

#include <iostream>
using namespace std;
class people{
  public:
    people(string n,int x,int y); 
    void a();
    ~people();
  private:
    string name;
    int height;
    int weight; 
}; 
people::people(string n,int x=9,int y=8){
      name=n;
      height=x;
      weight=y;
      cout<<name<<' '<<"调用构造函数"<<endl; 
    }
people::~people(){
  cout<<name<<' '<<"调用析构函数"<<endl; 
}
void people::a(){
      cout<<name<<' '<<height<<' '<<weight<<endl;;
    }
void shiyan(){
  people lin("小刚",180,190);
} 
int main(){
  people cao("小明",170,130);
  shiyan();
  cout<<"main还没结束!"<<endl; 
  return 0;
} 


小明是在main函数内,小刚是在shiyan()函数内,调用完shiyan() 函数后小刚生命周期结束,调用小刚的析构函数,而小明是等到main函数结束后调用析构函数;


其实构造函数还有初始化列表形式:

#include <iostream>
using namespace std;
class people{
  public:
    people(int x,int y);   //构造函数
    void a();
    ~people();            //析构函数
  private:
    string name="小明";
    int height;
    int weight; 
}; 
people::people(int x=9,int y=8):height(x),weight(y){}    //初始化列表    
people::~people(){
}
void people::a(){
      cout<<name<<' '<<height<<' '<<weight;
    }
int main(){
  people cao(170,130);
  cao.a();
  return 0;
} 


相关文章
|
6天前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
26 4
2023/11/10学习记录-C/C++对称分组加密DES
|
26天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
42 2
|
1月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
84 5
|
1月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
81 4
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
88 4
|
2月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
2月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
31 4
|
2月前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
32 4
|
2月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
26 1
|
2月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)