版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoxiao133/article/details/88723764
C++虚函数及其纯虚函数学习。
虚函数:子类可以实现具体函数,如果子类没有实现基类回自动补上。
纯虚函数:子类必须实现,不实现编译 不能通过。
虚析构:基类必须用虚析构函数这样子类析构(消失灭亡)时候才会释放基类申请的空间。
标准C语言读取数值矩阵:标准C语言从txt读取数值,分隔符是逗号和空格。
具体代码使用方式如下。
QtCreator下载链接:https://github.com/XiaoGongWei/StoreData/blob/master/VirtulaClassTest.zip
Qt设计界面读取txt,解析或者显示,代码下载链接:
https://github.com/XiaoGongWei/StoreData/blob/master/readFileDisplay.zip
People.h
#ifndef PEOPLE_H
#define PEOPLE_H
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
class People
{
public:
People();
virtual ~People();
virtual void speakName()
{
cout << "i am People." << endl;
}
public:
string m_name;
double m_whight;
bool m_sex;
double *m_leg;
};
class david: public People
{
public:
david();
~david();
void speakName();
void speakName(string spk_str);
double *m_david_leg;
};
class mawj: public People
{
public:
mawj()
{
cout << "mawj()" << endl;
}
~mawj()
{
cout << "~mawj()" << endl;
}
void speakName()
{
cout << " i am mawj" << endl;
}
};
#endif // PEOPLE_H
People.cpp
#include "People.h"
People::People()
{
m_name = "admin";
m_whight = 50;
m_sex = 1;
m_leg = new double(100);
}
People::~People()
{
cout << "People::~People() start" << endl;
cout << "m_leg->" << 0 << "->" << m_leg[0] << endl;
delete m_leg;
cout << "People::~People() 11111111" << endl;
cout << "m_leg->" << 0 << "->" << m_leg[0] << endl;
cout << "People::~People() end" << endl;
}
david::david()
{
m_david_leg = new double(199);
m_name = "david";
m_leg[0] = 9999;
m_sex = 1;
}
david::~david()
{
cout << "david::~david()" << endl;
cout << "david::~david() m_david_leg->" << m_david_leg << endl;
delete m_david_leg;
cout << "david::~david() m_david_leg->" << m_david_leg << endl;
}
void david::speakName()
{
cout << "david::speakName() -> m_name:" << m_name << endl;
cout << "david::speakName() -> m_leg:" << m_leg[0] << endl;
}
void david::speakName(string spk_str)
{
char *p = "ABCD";
int *in = new int(4);
cout << sizeof(p) << p << endl;
cout << sizeof(in) << *in << endl;
cout << "david::speakName() -> m_name:" << spk_str << endl;
delete in;
}
mian.cpp
#include <iostream>
#include <stdio.h>
#include "People.h"
using namespace std;
void speakName(People *ppa)
{
ppa->speakName();
}
int str2num(char *str, double *num)
{
int allnum = 0;
while('\0' != *str && '\n' != *str)
{
char bufstr[100] = {0};
int flag = 0;
while((' ' == *str || ',' == *str))
str++;
while(!(' ' == *str || ',' == *str))
{
if('\n'==*str || '\0' == *str)
break;
bufstr[flag] = *str;
flag++;
str++;
}
*num = atof(bufstr);
num++;
allnum++;
}
return allnum;
}
void readMat(char *filename)
{
FILE *pid = fopen(filename, "r");
if(NULL == pid)
return ;
while(!feof(pid))
{
char bufstr[1024]={0}, *shutchar;
double bufnum[1024] = {0.0};
int i = 0, allnum = 0;
fgets(bufstr, 1024, pid);
bufstr[1000] = '\0';
shutchar = &bufstr[0];
allnum = str2num(shutchar, bufnum);
for(i = 0; i < allnum;i++)
printf("%lf, ", bufnum[i]);
printf("\n");
}
fclose(pid);
}
int main(int argc, char *argv[])
{
// read matrix from txt
readMat("/home/danid/mat.txt");
// test for virtual function
People *ppeo = NULL;
ppeo = new david();
speakName(ppeo);
((david *)ppeo)->speakName("AAAAAAAAAAAA");
delete ppeo;
ppeo = new mawj();
speakName(ppeo);
delete ppeo;
return 0;
}