C++系统学习(3)
来源:互联网 发布:淘宝导航图片 编辑:程序博客网 时间:2024/05/18 01:16
看完函数,接下来就是最重要的类和面向对象编程。由于该部分知识点至关重要,所以,我新开一博文记录。
在C++中,可以使用struct和class进行类的设计和编写,那两者的区别和联系是什么呢?直接上例子讲解!
// 本程序和总结,参考自:http://blog.csdn.net/misayaaaaa/article/details/55195496// 感谢该博主的分享!!#include <iostream>#include <vector>#include <string>using namespace std;class Student{ Student(string name,int age, int score); // 构造函数 string m_name; int m_age; int m_score; // 定义三个变量 void showname() // 定义一个函数 { cout << m_name << "的年龄是:"<<m_age << ",得分为:"<< m_score <<endl; } // 类内定义的函数,编译器会优先视为内联函数};Student::Student(string name, int age, int score):m_name(name),m_age(age),m_score(score){}//成员函数初始化列表,将name赋给m_name,改变类内变量// 利用struct定义类struct Students{ Students(string name, int age, int score); // 构造函数 string m_name; int m_age; int m_score; // 定义三个变量 void shownames() // { cout << m_name << "的年龄是:"<< m_age << ",得分为:"<< m_score <<endl; }};Students::Students(string name, int age, int score):m_name(name),m_age(age),m_score(score){}// 列表初始化,覆盖类的内部变量int main(int argc, char **argv){ Student s("小明",18,3); // 报错,使用class,默认是private,外部不可访问 Students s2("小红",20,4); // 正常 s2.shownames(); return 0;}
运行代码:
发现报错了,而且提示Student::student,无法访问private成员;当我们把对应行给注释了,之后,我们再运行。
再次运行的截图:
结果成功运行。
总结:
1、class创建时,其数据访问控制默认是private的,即外部不可访问;struct创建时,其数据访问控制默认是public的,即公开外部可访问。
2、如果想做得更像一种数据结构,使用strcut;如果想做得像对象,则使用class!
3、对于访问控制,应该在程序里明确指出,而不是依靠默认!
一个简单的类的实例。
开发一个程序,分别定义学生类(CStudent)。要求:(1)在CStudent类中包含“姓名”、“性别”、“年级”、“班级”数据成员。(2) 在CStudent类中神功成员函数SetInfor,该函数的作用是设置成员变量的数值。(3)在CStudent类中声明ShowInfor函数,将其中的数据信息输出。
代码实现(使用了C型字符串数组,使用string类型写起来应该会更简单)
CStudent.h文件:
#include<iostream>using namespace std;#define MAXLEN 256class CStudent{public: CStudent(); //~CStudent(); void SetInfor(char *s,char*q,char *p,char *z); void ShowInfor();private: char *name; char *sex; char *grade; char *banji;};CStudent::CStudent(){ name = new char[MAXLEN]; sex = new char[MAXLEN]; grade = new char[MAXLEN]; banji = new char[MAXLEN];}void CStudent::SetInfor(char *s,char*q,char *p,char *z){ name = s; sex = q; grade = p; banji = z;}void CStudent::ShowInfor(){ int i = 0; cout << "Name: "; while(name[i]!='\0') { cout << name[i]; ++i; } i=0; cout << endl; cout << "Sex: "; while(sex[i]!='\0') { cout << sex[i]; ++i; } i=0; cout << endl; cout << "Grade: "; while(grade[i]!='\0') { cout << grade[i]; ++i; } i=0; cout << endl; cout << "Class: "; while(banji[i]!='\0') { cout << banji[i]; ++i; } cout << endl;}/*CStudent::~CStudent(){ delete [] name; delete [] sex; delete [] grade; delete [] banji;}*/
main.cpp中:
#include "CStudent.h"int main(){ CStudent s1; char s[20] = "Louis Hao"; char q[20] = "female"; char p[20] = "Yan 1"; char z[20] = "3"; s1.SetInfor(s,q,p,z); s1.ShowInfor();}
运行结果:
在这里,我是打算把析构函数也用上的,但是加上析构函数后,会报错,报的"Debug Assertion Failed",Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
我认为,这是内存泄漏造成的。当程序退出时,系统会回收分配的内存,就会调用析构函数,由于内存已经被错误地释放了,于是报错。(由于使用了new一般都会使用delete,很难发觉以上这个问题,特别是程序很大的时候。而我们可以使用string类型替代C型字符串数组,这样更安全。)
阅读全文
0 0
- 系统学习C++(1)
- 系统学习C++(2)
- 系统学习C++(4)
- 日志系统开发学习总结(C#)
- C++IO系统学习
- 系统学习C语言
- 深入系统学习C/C++
- 从零开始系统学习C/C++
- 系统编程(文件操作续)--C语言学习(3)
- c++thread学习(3)并发多线程系统开发过程
- 系统编程(文件操作)---C语言学习(2)
- C语言学习系统的数据库设计(原创)
- C++系统学习(3)
- 破解C语言学习系统 v3.0
- linux系统C语言学习总结
- Linux系统C语言学习总结
- linux系统C语言学习总结
- C学习笔记 --- 学生信息管理系统
- python 学习while语句中的break&continue
- [一点笔记]查看java架包源文件
- java序列化与反序列化
- 计算机网络常见知识点整理
- SCRUM实践的一个教训
- C++系统学习(3)
- 数组去重的6种方法
- 使用三种继承回归模型对美国波士顿房价训练数据进行学习,并对测试数据进行预测
- Python小程序分享01——用Python实现账号登录与注册界面【EasyGui】
- 双重for循环重难点解析
- Java DecimalFormat 用法
- 简介SpringData
- eclipse创建maven web项目
- LNMP环境的搭建及其测试详细解说