IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++语法系列 类和对象Ⅰ -> 正文阅读

[C++知识库]C++语法系列 类和对象Ⅰ

类和对象

将事物的属性和行为写在一起,放在类里,来表现事物

const double PI = 3.14159;

class Circle{
//访问权限
public:
  
	//属性
	int r;
	
	//行为(函数)
	double getP(){
	  return 2 * PI * r;
	}
};				// ?? 这里有一个分号

int main(){
	//借助Circle类,创建一个圆(即一个对象)
	Circle c1;
	c1.r = 5;
	cout << c1.getP() << endl;
}

访问权限控制

  • private:成员在类内可以访问,类外不可以访问

  • protected:成员在类内和继承树内可以访问,其他的不可以访问

  • public:成员在类内和类外都可以访问

class Person{
	public:
	string name;
	protected:
	string car;
	private:
	int password;
	public:
	void func(){
	  name = "zhangsan";
	  car = "tuolaji";
	  password = 123456;
	}
};

int main(){
	Person p1;
	p1.name = "lisi";
	p1.car = "benchi";		//编译不通过,因为是protected修饰的
	p1.password = 123;		//编译不通过,因为是private
	return 0;
}

struct和class的区别

成员默认的访问权限不同,struct 默认为public,class默认为private,目的是为了兼容C语言的struct

class C1{
	int a;		//默认为private
};

struct S1{
	int b;		//默认为public
};

int main(){
	//class
	C1 c1;
	c1.a = 100;		//编译不通过
	
	//struct
	S1.s1;
	s1.b = 100;		//编译通过
	return 0;
}

构造函数

  • 作用:构造函数用于创建对象时为成员属性赋值
  • 语法
类名(){
	//...
}
  • 分类
    • 按参数分
      • 有参构造
      • 无参构造
    • 按类型分
      • 普通构造
      • 拷贝构造
//拷贝构造
Person(const Person &p){		//常量引用,防止被拷贝的对象被修改
    //将传入的p的所有属性,拷贝到当前对象身上
    age = p.age;
}
  • 调用
  1. 括号法
 //调用无参构造方法,不加括号。
 //原因:加了括号变成了 Person p0(); 会被编译器当作函数的声明
 //(在一个函数体内,写另一个函数的声明是合法的)
 Person p0;
 Person p1(10);		//age = 10
 Person p2(p1);		//调用拷贝构造函数
  1. 显示法
Person p3 = Person(10);		//有参构造
Person p4 = Person(p3);		//拷贝构造
Person(10);					//匿名对象,当前行执行完毕后,系统后立即回收匿名对象

//不要利用拷贝构造初始化匿名对象,因为编译器会将下句看作 Person p3; 重定义了p3对象
Person(p3);
  1. 隐式转换法
Person p5 = 10;		//相当于 Person p5 = Person(10); 有参构造
Person p6 = p5;		//拷贝构造

析构函数

  • 作用

析构函数为对象销毁前系统自动调用,执行一些清理工作

  • 语法
~类名(){}
  • 注意
  1. 析构函数不能有参数,因此不能重载
  2. 程序在对象销毁前会自动调用析构函数,无需手动调用,且只会调用一次

静态成员 static

  • 静态成员变量
    • 所有对象共享一份同一块内存,所以也可以通过类名来访问
    • 在编译阶段就分配内存(全局区/数据段),而不是创建对象时
    • 必须类内声明,类外初始化
    • 也可以设置访问权限
class C{
public:
    static int b;
};

int C::b = 9;		//int必须要写

int main() {
    C c;
    cout << c.b << endl;		//通过对象访问
    cout << C::b << endl;		//通过类名访问
    return 0;
}
  • 静态成员函数
    • 所有对象共享一个函数,所以也可以通过类名来访问
    • 静态成员函数只能访问静态成员变量。因为不创建对象,也可以通过类名来调用静态成员函数,此时,没有对象,何来普通成员变量呢?其次,就算创建了对象,通过类名调用时,也不知道访问哪个对象的变量
    • 也可以设置访问权限

PS:CSDN广告多我忍了,怎么对Markdown的支持这么差,打个无序列表各种bug。。。。。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:48:45  更:2021-09-19 07:49:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 20:52:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码