当前位置: 首页 > wzjs >正文

手机网站做多少钱百度查询入口

手机网站做多少钱,百度查询入口,注册公司10万要交多少税,网页设计与网站建设作业2年前学过cpp,但是一直没有用到,现在要读研了,终于要用到了,重新拿出来看一看,觉得很多东西都能在c和python上看到影子。 #include "iostream" class Person { private:std::string name;int age;public://…

2年前学过cpp,但是一直没有用到,现在要读研了,终于要用到了,重新拿出来看一看,觉得很多东西都能在c和python上看到影子。

#include "iostream"
class Person {
private:std::string name;int age;public:// 默认构造函数Person() : name("Unknown"), age(0) { std::cout << "init 1" << std::endl; }// 带参数的构造函数Person(const std::string& n, int a) : name(n), age(a) { std::cout << "init 2" << std::endl; }// 拷贝构造函数Person(const Person& other) : name(other.name), age(other.age) { std::cout << "init 3" << std::endl; }// 析构函数~Person() {std::cout << name << "对象被销毁" << std::endl;}void introduce() {std::cout << "我叫" << name << ",今年" << age << "岁。" << std::endl;}void change(std::string new_name,int new_age) {name = new_name;age=new_age;std::cout << "changing is over" << std::endl;}
};

我来逐行解析一下。

首先私有变量是只有此类的此实例对象的公开区域的函数能调用的(后面还会有其他区域也能调用),也就是Person p1;Person p2;p2的pubilc函数不能调用p1的age,但是可以调用自己的,外部程序也无法直接访问age

Person p1;
Person p2;
p1.introduce();
p2.introduce();
p2.change("Trump", 72);//p2可以改变自己的age
p2.introduce();
p2.age=10;//错误用法

然后public的第一个构造函数。它相当于python里的self.init,是用来初始化私有变量的,name("unknown")就是给name赋值"unknown"。第一个初始化初始的是默认值,不需要传入参数,也不需要括号。而public的第二个带参数的构造函数就需要了,两者都只能初始化一次。

Person p1;
int x = 13;
std::string name = "Mike";
Person p2(name, x);
p2("x", 1);//常量、变量都可以,但不可重复初始化

我定义的这个name是string型,在构造函数里应该就是const std::string& n=name,这在c里是不合法的,因为n和name的类型不同,但在cpp里这表示拷贝,那n和name地址是否一样呢?验证一下

Person(const std::string& n, int a) : name(n), age(a) { std::cout << "init 2 "<<&n <<" " << &name << std::endl; }int x = 13;
std::string name = "Mike";
std::cout << &name << std::endl;
Person p1(name, x);

输出结果:

000000D8230FFA70
init 2 000000D8230FFA70 000000D8230FFA90

说明Person之前的name和Person里的n是同地址的,而Person里的n和name是不同的,这是因为第一个name是在main里定义的,第二个name是Person的一个private变量,改成std::string xname = "Mike";就好理解了。

接下来的拷贝构造函数是什么呢?如下图,很明显,它也是一个拷贝,那么&p3==&p4?当然不是。Person(const Person& other),&p3==&other是成立的,而p4是一个新创建的Person,所以地址不同,Person p4=p3,也是可以直接调用这个拷贝函数的。

int x = 13;
std::string name = "Mike";
Person p3(name, x);
Person p4(p3);
std::cout << "p3 address " << &p3 << std::endl;
std::cout << "p4 address " << &p4 << std::endl;

既然p3,p4地址都不同,那么拷贝之后再变化p3,p4也是不会跟着变化的。

同理我们可以直接如下使用拷贝,显然,p2=p1会调用之前构造的拷贝函数,但是&p3=p2不会,最后&p3==&p2,但不等于&p1

Person p1;
Person p2=p1;
Person &p3 = p2;
Person &p3 = &p2;//不符合拷贝用法,不能传入地址
std::cout << "p1 address " << &p1 << std::endl;
std::cout << "p2 address " << &p2 << std::endl;
std::cout << "p3 address " << &p3 << std::endl;

还有需要注意的是,初始化之后再改变x,p2的age也不会变。

int x = 13;
std::string name = "Mike";
Person p2(name, x);
p2.introduce();
x++;
p2.introduce();

最后是析构函数,是在Person的生命周期结束时自动调用的,也可以手动调用,会释放内存。它们是在栈区的,以p1,p2,p3创建 ,就会以p3,p2,p1自动释放。

Person p1;
Person p2=p1;
Person &p3 = p2;
std::cout << "p1 address " << &p1 << std::endl;
std::cout << "p2 address " << &p2 << std::endl;
std::cout << "p3 address " << &p3 << std::endl;
//p1.~Person();
p2.introduce();
p3.introduce();
p2.change("mike", 23);
p2.introduce();
p3.introduce();

而这个的p3和p2只会释放一次

http://www.dtcms.com/wzjs/343201.html

相关文章:

  • 61源码网seo报价单
  • 老实人做网站今日头条收录入口
  • 汕头百度seo找谁宁波品牌网站推广优化公司
  • 网站建设运用软件国内十大软件测试培训机构
  • 做网站运营有前途什么叫网络市场营销
  • 做策划网站推广怎么写简历关键词app
  • 网站维护收费最新军事新闻事件今天
  • 内网网站建设流程游戏优化是什么意思
  • 免费做翻页页面的网站写一篇软文多少钱
  • 如何用frontpage做网站惠州seo管理
  • 网站策划书3000百度收录提交入口
  • 购物网站有哪些功能网站加速
  • 公司 网站建设 简介怎样做电商 入手
  • 用vs做html网站西安做网站公司
  • 做网站什么框架方便重庆网站开发公司
  • 青岛制作网站企业互联网营销推广方案
  • 安全的政府网站建设百度怎么精准搜索
  • 企业网站本身应该就是企业( )的一部分域名查询服务器
  • 做网站首页的要素google seo教程
  • 管城网站建设网络营销推广方案论文
  • 自己如何做网站建设qq推广引流网站
  • 北京网站建设公司知乎网站优化网
  • 建站平台 做网站网站建设及推广优化
  • 陕西省住房与建设厅网站软文文章
  • 如何做网课网站快速排名优化推广手机
  • 延安疫情最新消息郑州seo排名优化公司
  • 网站颜色字体颜色北京网站优化站优化
  • wordpress站点限制插件百度快速收录权限域名
  • 网站开发一键上架淘宝北京网站设计公司
  • 网站主页图片怎么换百度不能搜的十大禁词