类与对象(C++)

    • 2.1 类与对象
      • 2.1.1 结构体
      • 2.1.2 类

2.1 类与对象

2.1.1 结构体

C++中的结构体不仅可以包含不同类型的数据,而且还可以包含操作这些数据的函数。

#include <iostream>
using namespace std;struct Complex{double i;double r;void init(double rr, double ii){r = rr;i = ii;}double real() {return r;}double image() {return i;}
};int main(void) {Complex c;c.init(2,3);cout << c.real() << " + " << c.image() << "i" << endl;return 0;
}

将数据和操作数据的函数包装在一起的主要目的就是实现的封装和隐藏。隐藏就是不让结构外的函数直接修改数据结构中的数据,只能通过结构体的成员函数对数据进行修改。但上面的代码明显没有做到这一点。为此C++中新增了3个访问权限限定符,用于设置结构体中数据成员和函数成员的访问权限

  • public

    公有成员(函数、数据),可被任何函数访问(结构体内和结构体外)。

  • protected

    保护成员,与集成相关

  • private

    私有成员(函数、数据),只能被结构体内函数访问

    #include <iostream>
    using namespace std;struct Complex{private:double i;double r;void init(double rr, double ii){r = rr;i = ii;}
    public:double real() {return r;}double image() {return i;}void ret_i(double data_r, double data_i){init(data_r, data_i);}
    };int main(void) {Complex c;
    //	c.init(2,3); //init() 函数是私有成员c.ret_i(5,3); //通过公共成员访问私有成员cout << c.real() << " + " << c.image() << "i" << endl;return 0;
    }
    

2.1.2 类

struct 还是容易和传统C语言中的结构混淆,C++中引进了功能与struct相同,但更安全的数据类型:

更安全是指结构体将所有成员都默认为public(公共),不够安全;类中成员默认为private(私有)权限

//语法格式
class 类名{
private:成员数据;成员函数;
public:成员数据;成员函数;
protected:成员数据;成员函数;
}; //特别注意,别忘了!!!!!!!!!!!
#include <iostream>
using namespace std;class Student{
private:string m_name;int m_age;int m_no;
public:/*类内声明*/void set_name(const string &name);void set_age(int age);void set_no(int no);void eat(const string &food);void who();
};/*类外定义*/
void Student::set_name(const string &name){m_name = name;}
void Student::set_age(int age) {m_age = age;}
void Student::set_no(int no){m_no = no;}
void Student::eat(const string &food){cout << "我今天吃了" << food << endl;}
void Student::who() {cout << "我叫: " << m_name << " 今年: " << m_age << " 学号: " << m_no << endl;}/*初始化函数*/
void init(Student &s1, const string &init_name, int init_age, int init_no, const string &food) {s1.set_name(init_name);s1.set_age(init_age);s1.set_no(init_no);s1.who();s1.eat(food);
}int main(void) {Student s1;init(s1, "王钢蛋", 18, 24020, "炸鸡");init(s1, "刘铁锤", 20, 24031, "汉堡");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql数据库的分离和附加转

一.MYSQL的命令行模式的设置&#xff1a;桌面->我的电脑->属性->环境变量->新建->PATH“&#xff1b;path/mysql/bin;”其中path为MYSQL的安装路径。二.简单的介绍一下命令行进入MYSQL的方法&#xff1a;1.C:/>mysql -h hostname -u username -p 按ENTER键&a…

Python中的xxx+=xxx和xxx=xxx+xxx一些区别及执行过程

预知小知识&#xff1a; Python中的变量与其他语言稍有差异&#xff0c;如a 10并不是直接在内存中创建一个变量a其值为10&#xff0c;而是在内存中创建一个a这个a指向这个10&#xff0c;在Python中所有牵扯到等号的均不是值赋值&#xff0c;全都是引用(C的小伙伴可以大致理解为…

codeblocks安装后提示找不到编译器

安装了自带编译器的codeblocks&#xff0c;但是打开后提示没有找到compiler&#xff0c; 经过几分钟的搜索&#xff0c;找了原因&#xff1a; 打开codeblocks&#xff0c;进入settings->compiler&#xff0c;选择如下: 然后&#xff0c;选择Toolchain executables&#xff…

欢迎加入Hello China技术讨论群组-QQ群:38467832

欢迎加入Hello China技术讨论群组-QQ群&#xff1a;38467832 在此群组内&#xff0c;我们可一起讨论Hello China及其它嵌入式操作系统的技术问题、应用问题以及其它相关问题。 Hello China相关的技术文档和实现文章&#xff0c;也会首先在该群组内发布给群内朋友。 转载于:http…

一文读懂|栈溢出攻击

什么是栈简单来说&#xff0c;栈 是一种 LIFO&#xff08;Last In Frist Out&#xff0c;后进先出&#xff09; 形式的数据结构。栈一般是从高地址向低地址增长&#xff0c;并且栈支持 push&#xff08;入栈&#xff09; 和 pop&#xff08;出栈&#xff09; 两个操作。如下图所…

用来做 favicon 的站点

这个站点是最好用的 http://converticon.com/转载于:https://www.cnblogs.com/johnsonshu/archive/2012/06/28/2568530.html

Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS

题目链接&#xff1a;https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意&#xff1a;一个长度为n的数组&#xff0c;数组的元素都在[L,R]之间&#xff0c;并且数组全部元素的和可以被3整除&#xff0c;问有多少种方法构建出该数组。答案模1000000007 例 输…

c++并发编程之原子操作的实现原理

原子(atomic)本意是”不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作”. 处理器如何实现原子操作 (1) 使用总线锁保证原子性 如果多个处理器同时对共享变量进行读写操作,那么共享变量就会被多个处理器同时进行操作,这样读写…

Sqlserver 通用存储过程(二) 联合主键

CREATEPROCP_public_ViewPage /**//**//**//* no_mIss 通用分页存储过程 2007.3.1 QQ:34813284 适用于联合主键/单主键/存在能确定唯一行列/存在能确定唯一行的多列 (用英文,隔开) 调用&#xff1a; 第一页查询时返回总记录和总页数及第一…

PHP定时执行任务的实现

此代码只要运行一次后关闭浏览器即可。 ignore_user_abort();//关掉浏览器&#xff0c;PHP脚本也可以继续执行.set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去$interval60*30;// 每隔半小时运行do{//这里是你要执行的代码sleep($interval);// 等待5分钟…

预检请求

不久前在公司写了一个基于 Hapijs 的后端项目&#xff0c;感觉这个框架很有自己的特点&#xff0c;跟 Express 和 Koa 的区别比较大&#xff0c;体现了配置大于编码的思想。用起来很方便&#xff0c;据说 Walmart 团队用这个框架扛住了黑五的流量&#xff0c;看起来在实际项目中…

linux编译动态库之-fPIC

在生成动态库时&#xff0c;常常习惯性的加上fPIC选项&#xff0c;fPIC有什么作用和意义&#xff0c;加不加有什么区别&#xff0c;这里做下小结&#xff1a; fPIC的全称是 Position Independent Code&#xff0c; 用于生成位置无关代码。什么是位置无关代码&#xff0c;个人理…

深入理解golang 的栈

线程栈(thread stacks)介绍 先回顾下linux的内存空间布局 简书_stack02.png当启动一个C实现的thread时&#xff0c;C标准库会负责分配一块内存作为这个线程的栈。标准库分配这块内存&#xff0c;告诉内核它的位置并让内核处理这个线程 的执行。在linux系统中&#xff0c;可通过…

const和define的区别

今天查看以前的代码&#xff0c;进行优化&#xff0c;回想到const和define一些区别&#xff0c;记录下来。 1.const是关键字&#xff0c;define不是关键字。 2.const定义的是只读变量&#xff0c;不是常量&#xff0c;define宏定义的是常量&#xff0c;变量不能作为定义数组的维…

理解ALSA

最近处理音频的问题&#xff0c;所以看了一些不错的文章&#xff0c;整理一些有用的资料出来&#xff0c;有需要的可以收藏。ALSA的框架图&#xff1a;这个图可以说是我目前看到最不错的&#xff0c;我发现很多应用开发的&#xff0c;一出现解决不了的问题&#xff0c;或者奇怪…

Xshell 6如何设置多个session显示在同一个窗口

刚才安装了Xshell 6之后&#xff0c;发现在同一个窗口只能显示4个session&#xff0c;网上查找了一些资料但是都不是想要的结果&#xff0c;经过几分钟的查找&#xff0c;终于找到了设置在同一个窗口session的个数&#xff0c;因此记录下来&#xff0c;或者给与他人帮助。以下以…

appium+java(五)微信小程序自动化测试实践

前言&#xff1a; 上一篇《appiumjava&#xff08;四&#xff09;微信公众号自动化测试实践》中&#xff0c;尝试使用appium实现微信公众号自动化测试&#xff0c;接着尝试小程序自动化&#xff0c;以学院小程序为例 准备工作 1、java-client 3.4.16依赖包 2、微信应用版本7.0.…

blockUI应用到Asp.Net页面时服务器控件(Button等)失效的问题

问题&#xff1a;在Asp.Net页面中用blockUI这个控件实现弹出窗口的效果&#xff0c;弹出页面内容为页面中某个Panel中的内容&#xff0c;包含TextBox、Button等服务器控件。使用时就简单的设置message属性。问题出来了&#xff0c;当显示这个弹出页面后&#xff0c;所有Button等…

android DatePicker

为什么80%的码农都做不了架构师&#xff1f;>>> public class DatePicker extends FrameLayout java.lang.Object android.view.View android.view.ViewGroup android.widget.FrameLayout android.widget.DatePicker DatePicker 一个选择年月日的日历布局视图 公…

一次限制进程的 CPU 用量的实操过程

大家好&#xff0c;我是飞哥&#xff01;给大家分享一个事情。背景是这样的&#xff0c;我们要测试某个第三方 SDK 运行性能&#xff0c;这是个 CPU 密集型的服务。我想评估一下它运行一遍到底有多吃 CPU&#xff0c;以便评估上线后我们需要部署多少台服务器。我们是在一台 16 …