白话C++编程系列之十七 结构体
上篇《白话C++编程系列之十六 调试篇》, 我们一起学习了C++中是如何进行调试(抓虫子的).
For a fish, the archer fish is known to shoot down bugs from low hanging plants by spitting water at them.
对于鱼类来说,已知射手鱼通过向其吐水来击落低矮植物的虫子。
现在来回顾一下吧!^_^
调试(debug)
调试 就是借助断点或者日志等方式来 de-bug, 消灭掉程序中的 bug.
这样程序运行更健康!
具体的概念,方法和如何践行, 请您再次再翻开《白话C++编程系列之十六 调试篇》看看,加深印象.
今天我们一起来学习, C++中面向对象的一种将 数据 和 操作数据的方法 打包 在一起的数据结构.
这里说的数据结构, 就类似一个收纳盒或者一台冰箱, 它们的里面可装东西, 水果蔬菜, 而且收纳盒和冰箱本身起着容纳,保鲜的作用.
收纳盒中的东西或者冰箱中的水果或肉类, 就可以想像成C++中的数据, 收纳和保鲜则是施加到这些数据上的操作方法.
通常来说, 数据一般为名词, 操作为动词.
之前我在我的白话C++编程系列中也说过一个我最推崇的编程原则之一:
一处定义原则.(请参见知识星球一处定义原则)
其实, 面向对象就是一处定义原则的深刻体现.
面向对象(OO: Orential object)核心是将数据和对数据的操作打包在一个 结构体(struct) 或 类(class) 中.
面向对象是软件行业中少有的革命性进步和思想, 是软件工程发展的飞跃和福音.
每当您在越来越大的项目中进行软件开发时, 您的体会会越来越深!
每当您对比面向过程的那种一锅粥开发方式时, 您会知道面向对象有多么的优雅, 完美和让您心动!
1. 结构体是啥?
结构体 一个包含数据和对其数据进行操作的数据结构.
数据
就像上面举的例子, 水果,蔬菜,肉都是数据.
操作
收纳, 保存, 保鲜 等等, 都是施加到 数据 上的操作.
数据结构
冰箱, 收纳盒 就是一个结构. 里面放(包)着数据( 水果, 牛奶, 蔬菜等...)
C++中的结构体是指:
struct 这个关键字
比如 定义一个 007 的结构体:
struct str007
{
//空的结构体
}
定义一个复杂一点儿 007结构体: 只有数据
struct stru007
{
std::string _strName; //名字
std::string _strStuff; //写作
std::string _strWeb; //网站
std::string _strWOA; //微信公众号
};
再来一个更丰富多彩的007.
数据和操作都有了.^_^
struct stru007
{
std::string _strName; //名字
std::string _strStuff; //写作
std::string _strWeb; //网站
std::string _strWOA; //微信公众号
// 构造函数
stru007()
{
name( "007" );
stuff( "写作" );
web( "http://buchuju.net" );
woa( "不出局" );
}
//析构函数
~stru007()
{}
public:
std::string name();
void name( std::string const & strName );
std::string stuff();
void stuff( std::string const &strStuff );
std::string web();
void web( std::string const & strWeb );
std::string woa();
void woa( std::string const & strWoa );
void print();
void print( std::string const & strTip, std::string const & strValue );
};
2. 结构体的例子(举例)?
在结构体是啥中,我们已经给它的定义和例子,现在来个更完整的例子...
当然现在struct007这个结构体还在不断成长壮大, 因此期待您的丰富的声明和定义!
让struct007这个结构体更精彩,更完整,更壮大!...
//这次给出声明和具体实现
struct stru007
{
std::string _strName; //名字
std::string _strStuff; //写作
std::string _strWeb; //网站
std::string _strWOA; //微信公众号
// 构造函数
stru007()
{
name( "007" );
stuff( "写作" );
web( "http://buchuju.net" );
woa( "不出局" );
}
//析构函数
~stru007()
{}
public:
std::string name()
{
return _strName;
}
void name( std::string const & strName )
{
_strName = strName;
}
std::string stuff()
{
return _strStuff;
}
void stuff( std::string const &strStuff )
{
_strStuff = strStuff;
}
std::string web()
{
return _strWeb;
}
void web( std::string const & strWeb )
{
_strWeb = strWeb;
}
std::string woa()
{
return _strWOA;
}
void woa( std::string const & strWoa )
{
_strWOA = strWoa;
}
void print()
{
std::cout << std::endl;
print( "name", name() );
print( "stuff", stuff() );
print( "web", web() );
print( "woa", woa() );
}
void print( std::string const & strTip, std::string const & strValue )
{
std::cout << strTip << ":" << strValue << std::endl;
}
};
007结构体程序运行图:
3. 践行struct
动手实践吧!
现在打开您安装的vs2013( or open http://cpp.sh)敲入文章中上面的代码, 或您想声明,定义的结构体.
按F5或者点击网站上的run按钮, 欣赏下您的劳动成果吧. 哈哈!
恭喜您, 学会和践行了C++中最重要的 面向对象方法和其杰出代表: struct
完整的代码如下:
// D:\dev\jinLab\p17_struct\p17_struct\p17_struct.cpp
// 调试篇:
/*
@Author: Albert 小宁
@Web: http://jinLab.com
@WeChatOfficalAccount: 小宁静致远
@Date: 2018-03-12
@KS: https://t.xiaomiquan.com/IeieiEm
*/
#include <iostream>
#include <string>
struct stru007
{
std::string _strName; //名字
std::string _strStuff; //写作
std::string _strWeb; //网站
std::string _strWOA; //微信公众号
// 构造函数
stru007()
{
name( "007" );
stuff( "写作" );
web( "http://buchuju.net" );
woa( "不出局" );
}
//析构函数
~stru007()
{}
public:
std::string name()
{
return _strName;
}
void name( std::string const & strName )
{
_strName = strName;
}
std::string stuff()
{
return _strStuff;
}
void stuff( std::string const &strStuff )
{
_strStuff = strStuff;
}
std::string web()
{
return _strWeb;
}
void web( std::string const & strWeb )
{
_strWeb = strWeb;
}
std::string woa()
{
return _strWOA;
}
void woa( std::string const & strWoa )
{
_strWOA = strWoa;
}
void print()
{
std::cout << std::endl;
print( "name", name() );
print( "stuff", stuff() );
print( "web", web() );
print( "woa", woa() );
}
void print( std::string const & strTip, std::string const & strValue )
{
std::cout << strTip << ":" << strValue << std::endl;
}
};
int main( int argc, char * argv[ ] )
{
std::cout << argc << " argv: " << argv;
for ( int i = 0; i < argc; ++i )
std::cout << "i: " << i << " argv:" << argv[ i ];
//声明007结构体对象
stru007 s007;
//调用007结构体'打印'方法
s007.print();
// 修改007结构体内部的数据
s007.name( "零零七" );
s007.stuff( "七天一篇写七年!" );
s007.web( "http://www.buChuJu.net" );
s007.woa( "向左而生" );
s007.print();
return 0;
}
怎么样? 很简单吧?
Define your OWN struct!
小结:
结构体是啥?
结构体 一个包含数据和对其数据进行操作的数据结构.
结构体(例子)
践行结构体
Any ideas?请随时在文章留言区留言或者直接联系我 ^_^
白话C++编程系列之:下期预告
白话C++编程系列之十八: 类
* 1. 类是啥?
* 2. 类咋用?
* 3. 践行类.
延伸 相关阅读
gdb官方网站: gdb official website: https://www.gnu.org/software/gdb/
相信好运,自然好运!
Learn archer fish!
《白话C++编程系列》
Wanna learn English in USA? Click this link:
Talk English in USA: https://t.xiaomiquan.com/EuBqfMb
区块链投资/板砖/挖矿: https://t.xiaomiquan.com/iQV37MB
Robinson Crusoe|鲁滨逊漂流记-Chapter 6
请大家多多动手,让编程也成为您的一种爱好和生产力。
请关注我的微信公众号 小宁静致远 或扫码关注我, 欢迎、感激传播! ^_^
期待和您多交流、共成长。谢谢!
精灵实验室? http://jinLab.com
留言区就是您的天下,欢迎吐槽、拍砖!
Why NOT let programming a skill of you?
Please follow my Wechat Official Account 小宁静致远 or scan the 2D code above to follow me & thanks for sharing me to your friends! ^_^
Hope we can communicate each other & improve ourselves together. Thanks!
JinLab? http://jinLab.com
Any ideas? Please add comments to the article!
学习C++? Lear C++? 请加入我的知识星球: Join my Knowledge Space:
白话C++编程:C++入门与实践 https://t.xiaomiquan.com/IeieiEm
oral C++ programming and practice! https://t.xiaomiquan.com/IeieiEm
不让好机会溜走,飞向白话C++编程知识星球!
鼓励我的创作? Encourage me?
Congratulations @mosjin! You have received a personal award!
1 Year on Steemit
Click on the badge to view your Board of Honor.
Do not miss the last post from @steemitboard: